今天遇到一个慢查询的问题:
EXPLAIN SELECT id , answer , answererPuid , choice , costTime, insertTime , isCorrect , questionId , questionType , quizRecordUuid , score , updateTime
from t_quiz_answer_record
where answererPuid=159214041
and questionType=13906
and questionId=1508777
order by id asc
limit 1;
目前已有的索引: idx_puid_uuid
测试过程中发现:
order by 后面跟 id,但是没有limit 时,会走自己建的索引
order by 后面跟 id,并且有limit 时,竟然会走主键索引,
但是当order by后面跟的是非id字段时,比如insertTime,这时就算加上limit也走的是自己建的索引
所以问题的根源是 由于order by id + limit 的结合使用导致了查询没有走期望的索引,而是走了主键索引
解决办法:不要用order by id了,最好换成其他在索引中的字段,没有的话用insertTime也可以
参考链接:MySQL ORDER BY主键id加LIMIT限制走错索引 - 简书