✅执行计划中,key有值,还是很慢怎么办?

典型回答

✅SQL执行计划分析的时候,要关注哪些信息?

执行计划中,key有值,并且type=index,这时候很多人认为是走了索引的。


当我们执行执行计划查看一个SQL的执行过程的时候,通常会见到以下这样的执行计划:

+----+-------+---------------+----------+--------------------------+                                           
| id | type  | possible_keys | key      | Extra                    |                                           
+----+-------+---------------+----------+--------------------------+                                           
|  1 | index | NULL          | idx_abcd | Using where; Using index |                                           
+----+-------+---------------+----------+--------------------------+ 

这个执行计划中,type=index,key=idx_abcd很多人会认为这表示这条SQL走了索引,但是其实这么理解是不对的。

如果是走了索引Extra中的内容应该是Using index而不是Using where; Using index

以上的这个执行计划表明,这个SQL确实用到了idx_abcd的这个索引树,但是他并没有直接通过索引进行匹配或者范围查询,而是扫描了整颗索引树。

所以,type=index 意味着进行了全索引扫描, 会遍历索引树来查找匹配的行,这个效率比扫表扫描快一些,但是很有限,和我们通常意义上理解的走了索引 是两回事儿。

遇到这种情况,大概率是因为没有遵守最左前缀匹配导致的索引失效了。所以需要调整查询语句,或者修改索引来解决。

原文: https://www.yuque.com/hollis666/xkm7k3/upcggbxiyk11gudc