我的查询

      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/

10-10 09:45