社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

多栏mysql索引

Subhash Deshmukh • 6 年前 • 1411 次点击  

我有一个select查询,需要在其中包括以下列(表中几乎所有列):

SELECT  ANI,CALL_ID, DATE_TIME, ABANDON_RATE, CALL_TYPE, CAMPAIGN, CAMPAIGN_TYPE, CUSTOMER_NAME, DISPOSITION, DNIS, LIST_NAME, 
        SESSION_ID, SKILL, AGENT_EMAIL, AGENT_GROUP, THIRD_PARTY_TALK_TIME, AFTER_CALL_WORK_TIME, HOLD_TIME, CALL_TIME, HANDLE_TIME, IVR_TIME,
        MANUAL_TIME, TALK_TIME, QUEUE_WAIT_TIME, advertiserName, affiliateName, callerID, campaignName, ChargentSFA__Biling_Phone__c, CONTACT_CREATE_TIMESTAMP,
        CONTACT_ID, CONTACT_MODIFIED_TIMESTAMP, Date_Added, destinationPhoneNumber, leadsource, number1, salesforce_id, source, transactionID,
        IVR_PATH 
FROM call_data_report 
WHERE ANI= '123456' OR DNIS = '123456' 
ORDER BY DATE_TIME desc;

此查询执行时间太长(超过3分钟)。为了提高查询性能,我在WHERE子句(即ANI和DNIS)中使用的列上创建了一个索引。

create index ani_idx on call_data_report(ANI,DNIS)

但是,当我检查上面的select查询的explain输出时,它显示它没有使用索引。是因为这些柱子吗?我需要创建什么类型的索引来提高上述查询的性能。

注意:ANI和DNI的列中有空值。

谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38863
 
1411 次点击  
文章 [ 2 ]  |  最新文章 6 年前
scaisEdge
Reply   •   1 楼
scaisEdge    6 年前

在这种情况下,您可以尝试使用两个单列索引。

create index ani_idx1 on call_data_report(ANI);

create index ani_idx2 on call_data_report(DNIS); 

因为使用复合索引的第二个键 DNIS 未使用..

Barmar
Reply   •   2 楼
Barmar    6 年前

只有在将测试与 AND OR 。当你有一个 条件,它必须独立地测试每个列,但复合索引是一个树,它具有 DNIS 在他们的关系中 ANI 。所以应该为每一列创建单独的索引。

MySQL通常也不擅长优化 查询。如果将其拆分为两个与之结合的查询,可能会更好 UNION :

SELECT ...
FROM call_data_report
WHERE ANI = 123456
UNION
SELECT ...
FROM call_data_report
WHERE DNIS = 123456