106 透彻研究通过explain命令得到的SQL执行计划(7)
2023/2/27大约 2 分钟
extra
这个extra里的信息可能会非常非常的多,很多其实也偶尔出现,也没多大意义,。我们主要是给大家讲一些平时常见的,比较有用的extra信息。
比如下面的SQL语句:
EXPLAIN SELECT x1 FROM t1 WHERE x1 = 'xxx';
可以看看他的执行计划是什么样的
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | t1 | NULL | ref | index_x1 | index_x1 | 456 | const | 25 | 100.00 | Using index |
+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------------+
这里我们可以看一下,这个执行计划现在什么意思,可以说是一清二楚。首先他是访问了t1表,使用的是ref访问方法,也就是基于二级索引去查找,找的是index_x1这个索引,这个索引的最大数据长度是456字节,查找的目标是一个const代表的常量值,通过索引可以查出来25条数据,经过其他条件筛选过后,最终剩下数据是100%。
那么我们看看extra的信息,是Using index,这是什么意思呢?
其实就是说这次查询,仅仅涉及到了一个二级索引,不需要回表,因为他仅仅是查出来了x1这个字段,直接从index_x1索引里查就行了。
如果没有回表操作,仅仅在二级索引里执行,那么extra里会告诉in是Using index。
另外,如果有个SQL语句是:
SELECT * FROM t1 WHERE x1 > 'xxx' AND x1 LIKE '%xxx';
此时他会先在二级索引index_x1里查找,查找出来的结果还会额外的跟x1 LIKE '%xxx'条件做比对,如果满足条件的才会被筛选出来,这种情况下,extra显示的是Using index condition。