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;

转载于:https://www.cnblogs.com/krisy/archive/2012/11/28/2792913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值