zoukankan      html  css  js  c++  java
  • Mysql Force Index 不起作用, 用 IGNORE INDEX 来顶替

    表author_r有100W左右数据, 表中有多个索引:
    1. Inx_SNS_Website_Code(SNS_Website_Code)
    2. Inx_Pair_Author_Raw_ID(Pair_Author_Raw_ID)
    3. Inx_Author_RawID(Author_Raw_ID)
    4. Inx_Time_S_Code_RType_RawID(Extracted_Time, SNS_Website_Code, R_Type, Author_Raw_ID, Pair_Author_Raw_ID)

    下面SQL中的查询结果有300条:  
    1. 走索引Inx_Author_RawID,Inx_Pair_Author_Raw_ID是最快的
    2. 但默认走Inx_SNS_Website_Code索引, 特别慢.
    3. 调试: 设置强制走索引Force Index(Inx_Time_S_Code_RType_RawID), EXPLAIN发现没走索引, 即强制不成功
        强制走 Inx_Author_RawID, Inx_Pair_Author_Raw_ID索引也不成功
    4. 后来发现还有IGNORE INDEX, 尝试IGNORE INDEX(Inx_SNS_Website_Code), 此时走的索引是Inx_Time_S_Code_RType_RawID, 速度还是很慢, 原因是时间跨度太大
    5. 最后IGNORE INDEX(Inx_SNS_Website_Code,Inx_Time_S_Code_RType_RawID), 走索引(Inx_Author_RawID,Inx_Pair_Author_Raw_ID), 速度很快.
    疑问: 不知为啥 Force Index 会不成功? 知道的朋友麻烦告知一下.

    SELECT ar.* FROM `author_r` ar IGNORE INDEX(Inx_SNS_Website_Code,Inx_Time_S_Code_RType_RawID)
    WHERE 1=1 
    and ar.Extracted_Time BETWEEN str_to_date('1970-11-01 00:00:00','%Y-%m-%d %H:%i:%s') and str_to_date('2012-11-28 23:59:59','%Y-%m-%d %H:%i:%s') 
    and ar.SNS_Website_Code='TW' and ar.R_Type in ('F','I','R','LL')
    and (  
        Author_Raw_ID in ('tw_tabelogcospe') 
        or Pair_Author_Raw_ID in ('tw_tabelogcospe')
    )
    order by Pair_Name asc limit 300;
  • 相关阅读:
    android 振动
    linux实用命令-查看文件夹的大小
    无显示屏的开发板抓屏
    传感器Sensor的使用-距离感应(听筒模式)
    4.4原生应用获取通话状态
    git服务器的使用
    (转)浅谈ANR及log分析ANR
    ubuntu下从软件中心安装软件时的软件缓存目录
    mysql————Innodb的可重复读的情况下如何避免幻读?
    MyISAM和Innodb的区别
  • 原文地址:https://www.cnblogs.com/krisy/p/2792913.html
Copyright © 2011-2022 走看看