我的查询
SELECT Info.InfoID,
SessionInfo.SessionInfoID,
SessionInfo.ANI,
ANumber.ANumber,
tmfInfo.PTime,
tmfInfo.PTry,
SessionInfo.CardID,
tmfInfo.Status
FROM tmfInfo,
SessionInfo,
ANumber ,
ANumberLog,
ANumberGroup,
ANumberGroupLog
WHERE (tmfInfo.IVRSessionInfoID = SessionInfo.IVRSessionInfoID)
AND (SessionInfo.ANumberLogID = ANumber.ANumberLogID)
AND (ANumber.AccessNumberLogID = ANumberLog.ANumberLogID)
AND (ANumberrLog.ANumberGroupID = ANumberGroup.ANumberGroupID)
AND (ANumberGroup.ANumberGroupLogID = ANumberGroupLog.ANumberGroupLogID)
AND (SessionInfo.SessionCallTime >= '2013-08-01 00:00:00'
AND (SessionInfo.SessionCallTime <= '2013-08-01 23:59:59')
AND (ANumberLog.IsDeleted = '0')
AND (ANumberLog.IsActive = '1')
AND (ANumberGroupLog.IsDeleted = '0')
AND (ANumberGroupLog.IsActive = '1')
ORDER BY SessionInfo.SessionCallTime,tmfInfo.PTime DESC;
说明查询结果
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE DtmfInfo ALL SessionInfoID 1728919 Using temporary; Using filesort
1 SIMPLE SessionInfo eq_ref PRIMARY,SessionCallTime,ANumberLogID PRIMARY 8 IVRDtmfInfo.SessionInfoID 1 Using where
1 SIMPLE Anumber ref AnumberLogID AnumberLogID 5 SessionInfo.ANumberLogID 1 Using where
1 SIMPLE AnumberLog eq_ref PRIMARY,AcumberGroupID,IsActive,IsDeleted PRIMARY 4 SessionInfo.ANumberLogID 1 Using where
1 SIMPLE AnumberGroup eq_ref PRIMARY,ANumberGroupLogID PRIMARY 4 AnumberLog.ANumberGroupID 1
1 SIMPLE AnumberGroupLog eq_ref PRIMARY,IsActive,IsDeleted PRIMARY 4 Using where Using where Using where
我在SessionInfoID字段上有一个索引
查询DtmfInfo表不使用索引....
任何帮助/说明都会有所帮助。使用MySQL 5.5.14
最佳答案
我认为您必须使用FORCE INDEX:
查询将是这样的:
选择Info.InfoID,
SessionInfo.SessionInfoID,
SessionInfo.ANI,
ANumber.ANumber,
tmfInfo.PTime,
tmfInfo.PTry,
SessionInfo.CardID,
tmfInfo.Status
从tmfInfo FORCE INDEX(index_name)内部联接mfInfo.IVRSessionInfoID = SessionInfo.IVRSessionInfoID上的SessionInfo,
一个号码 ,
ANumberLog,
ANumberGroup,
ANumberGroupLog
哪里
(SessionInfo.ANumberLogID = ANumber.ANumberLogID)
AND(ANumber.AccessNumberLogID = ANumberLog.ANumberLogID)
AND(ANumberrLog.ANumberGroupID = ANumberGroup.ANumberGroupID)
AND(ANumberGroup.ANumberGroupLogID = ANumberGroupLog.ANumberGroupLogID)
AND(SessionInfo.SessionCallTime> ='2013-08-01 00:00:00'
AND(SessionInfo.SessionCallTime
关于mysql - 为什么在这里查询不使用索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19031224/