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;
  • 相关阅读:
    Gengxin讲STL系列——Set
    理解Python的With语句
    Python中Non-ASCII character 'xe7' in file的问题解决
    gnome-terminal的一些调整
    硬盘的CHS寻址
    Wiz发布cnblog笔记
    cygwin安装man手册
    linux命令行使用
    小步前进
    学习的感觉真好
  • 原文地址:https://www.cnblogs.com/krisy/p/2792913.html
Copyright © 2011-2022 走看看