数据库索引问题

Posted jwentest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库索引问题相关的知识,希望对你有一定的参考价值。

 

# 背景

群上有一位同学咨询一个问题,两个查询语句,就一个limit 11, 一个limit 12,处理的效率相差巨大,如下图:

技术分享图片

技术分享图片

 

# 解决

原因就是因为limit不同,导致走了不同的索引

走的索引不一样,决定了要检索的数据量多少
1、当你要取的数据很少的时候,mysql认为走start_time的索引很快就能找够满足条件的数据,结果实际上满足条件的数据按照start_time倒序排列需要检索很多数据,所以会比较慢。
2、而当你limit20的时候mysql认为按照其他索引可能需要扫描很多的记录才能找到你要的结果,所以走了city_id的索引。
so这种情况你可以尝试一下按照start_time倒序排列后找两条最近的数据出来,按这些字段的值再去用limit 0,2检索看看是不是很快,如果是的话那就可以确定是这个原因。

一个类似的问题:https://segmentfault.com/q/1010000010707314

解决方法:

1. 强制使用一个索引,try,可以解决,但不够灵活

2. order by 后面的时间做个空运算,干扰下优化器,

date_sub(create_time, interval 0 day)

或者 

create_time+0

 

 

以上是关于数据库索引问题的主要内容,如果未能解决你的问题,请参考以下文章

关于SQLServer 2000 索引问题

pymysql操作数据库与索引

oracle索引问题,删除再重建索引与索引分析

ORACLE 大表索引问题:数据量5亿+,做查询,按时间一个月分区,查询会用到3 4个字段,如何见索引

MySQL索引怎么工作的

解决插入数据时,唯一索引/主键冲突问题