奇怪的慢sql
我们先来看2条sql
第一条:
select * from acct_trans_log WHERE acct_id = 1000000000009000757 order by create_time desc limit 0,10
第二条:
select * from acct_trans_log WHERE acct_id = 1000000000009003061 order by create_time desc limit 0,10
表的索引及数据总情况:
索引:acct_id,create_time分别是单列索引,数据库总数据为500w
通过acct_id过滤出来的结果集在1w条左右
查询结果:第一条要5.018s,第二条0.016s
为什么会是这样的结果呢?第一,acct_id和create_time都有索引,不应该出现5s查询时间这么慢啊
那么先来看执行计划
第一条sql执行计划:
第二条执行计划:
仔细观察会发现,索引只使用了idx_create_time,没有用到idx_acct_id
这能解释第一条sql很慢,因为where查询未用到索引,那么第二条为什么这么快?
看起来匪夷所思,其实搞