今天遇到个奇葩的问题,应用主键排序速度奇慢无比,经过不懈的努力,终于找到了问题的原因。
一、错误现象
template表:
索引:索引名随便起的,O(∩_∩)O哈哈~
查询语句:
select t.template_id from template t ORDER BY t.template_id desc数据库中数据7w多条,查询耗时在8s以上。
二、错误现象分析
首先我们对这条sql执行查询计划:
发现这条语句应用的索引居然是key_sync_status,而不是主键,这就是问题的关键所在了!
为了进一步确定,再对下面的sql语句执行查询计划:发现使用where条件后,索引变成了主键。
通过以上的情况可以看出,MySQL默认的查询(没有where条件),不一定使用主键,由于MySQL的每一条简单查询只应用一个索引,所以,这个时候使用order by 主键,主键的索引功能失效。
三、解决方案
1、order by 索引(where条件中引用的索引)。
2、强制使用主键:FORCE INDEX(PRI),如果想强制使用索引,则用FORCE INDEX(索引名)。
select t.template_id from template t FORCE INDEX(pri) ORDER BY t.template_id desc四、其他order by 索引失效的原因分析
1、MySQL每天一条简单语句只应用一个索引,所以order by的字段要在索引之中,并且和where条件可以合并成组合索引。
例如:下面情况会应用组合索引。
2、select的字段,必须是索引字段。(主键查询除外)
例如:下面情况不会应用组合索引。
3、如果sql语句为复合语句,包含子查询等,可以把语句分解成简单查询来分析。
以上。
到此这篇mysql主键查询慢(mysql查询表主键)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/29395.html