MySQL Execution Plan--EXPLAIN用法

MySQL Explain新用法:

--使用EXPLAIN来查看语句的最终执行计划
语法:EXPLAIN [EXTENDED] SELECT select_options


--在MYSQL 5.7版本后,可以查看正在执行的语句的执行计划
EXPLAIN FOR CONNECTION connection_id;


--在MYSQL 5.7版本后,可以指定生成执行计划的格式为JSON
EXPLAIN FORMAT=JSON SELECT ...

在EXPLAIN的输出结果中,有一行Type用来表示MYSQL使用哪种访问类型来从MYSQL表中找到需要的行。

type=ALL: 表示全表扫描,需要遍历全表的所有行。
缺少索引或缺少合适的过滤条件,或执行计划有问题

type=INDEX: 表示所有扫描,需要遍历索引上所有行。
查询缺少过滤条件或存在类型转换问题。

type=range: 表示范围扫描。

type=ref: 使用非唯一索引或唯一索引的前缀扫描,返回匹配某个单独值得记录行。

type=eq_ref:使用唯一索引来匹配。

type=const/system:单表总最多有一个匹配行,查询效率高。

type=null,MYSQL不用访问表或索引即可获得结果。


使用EXPLAIN EXTENDED 命令+SHOW WARNINGS命令来看在SQL语句被执行前被执行优化器改写成的新SQL:

EXPLAIN EXTENDED SELECT * FROM TB001 WHERE ID=200;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+----------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+----------+-------+
| 1 | SIMPLE | TB001 | const | PRIMARY | PRIMARY | 8 | const | 1 | 100.00 | NULL |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+----------+-------+

SHOW WARNINGS G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: /* select#1 */ select '200' AS `id`,'INNODB_READ_AHEAD_TH' AS `c1` from `test1`.`tb001` where 1
1 row in set (0.00 sec)



原文地址:https://www.cnblogs.com/gaogao67/p/10726708.html