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)