本文主要是介绍MySQL查询不走理想索引,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
sql形为
select ... where a=xx order by b limit c
# 在字段a和字段b上均设置了索引
执行时可能由于MySQL选择的索引不符合预期导致慢查询
理想情况是查询时选用where筛选字段相关的索引加速,即选用和字段a 相关的索引,但实际查询时mysql选用了和字段b 相关的索引
原因是:
- mysql优化器认为如果不走b字段索引,在查询出结果后还需要排序,而走b字段索引只需要顺序扫描,且扫到满足limit c就行了,效率比选取其他索引高,所以选择了b索引而不是理想的a索引
- 如果字段b没有索引,不会出现上述情况
- 如果没有limit关键字,也不会出现上面的情况。
这种问题较为隐蔽,不太容易在编写sql时注意到,所以在大表中写查询语句时最好去提前用explain执行看一下是不是符合预期
这篇关于MySQL查询不走理想索引的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!