1.执行计划 关键字 explain
explain select user,host,plugin from mysql.user;
输出
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | user | NULL | ALL | NULL | NULL| NULL | NULL| 6 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
2.Explain 查出执行计划化各字段解释,重点看type
id:查询标识符。在所有组中,id值越大,优先级越高,越先执行,id如果相同,可以认为是一组,从上往下顺序执行;
select_type:select_type可选的参数较多,如下:
SIMPLE 简单的select查询,未使用UNION和子查询
PRIMARY 查询中包含任何复杂的子部分,则被标记为PRIMARY,PRIMARY为最外层查询,最后执行
UNION 第2个SELECT在UNION之后,则被标记为UNION
DEPENDENT UNION 含有UNION查询的第二个或最后一个表,依赖外部的查询
UNION RESULT UNION结果
SUBQUERY 在SELECT或WHERE中包含的子查询
DEPENDENT SELECT 子查询中的第一个SELECT,依赖外部的查询
DERIVED 衍生表,衍生表是FROM子句中子查询的内部名称
MATERIALIZED 物化子查询
UNCACHEABLE SUBQUERY 子查询,其结果无法缓存,必须针对外部查询的每一行进行评估
UNCACHEABLE UNION 在UNION里的第二个或最后一个表属于不可缓存的子查询
table: 此次查询访问的表
—
—:该行是id为N的行的派生表
—:该行是物化子查询的结果
partitions:该参数用于记录使用的分区信息,NULL表示该表不是分区表
type:连接类型,索引查询的类型(ALL、index、range、ref、eq_ref、const(system)、NULL)
explain的type列表示表的连接类型,从最佳到最差类型如下:比较常见:(ALL、index、range、ref、eq_ref、const(system)、NULL)
System --> const --> eq_ref --> ref --> fulltext --> ref_or_unll --> index_merge --> unique_subquery --> index_subquery --> range --> index --> ALL
possible_keys:在该查询中,MySQL可能使用的索引,如果此列是NULL,则没有相关的索引,在这种情况下,需要检查WHERE字句,以确定是否适合创建索引
key:MySQL实际使用的索引。在大多数情况下,key中的值都在possible_key里面,但也会出现possible_key不存在该值,但key里面存在的情
key_len:该列指MySQL决定使用的索引长度。该值体现了在使用复合索引的时候,使用了复合索引的前面哪几个列(需要根据字段长度计算),如果key列为NULL,则该列也为NULL。由于key存储的格式原因,可以为NULL的列的key长度比NOT NULL的列长度大1。
ref:列显示哪些列或者常量与key中的索引进行比较,以从表中选择行
rows:MySQL查询需要遍历的行数,对于innodb表,可能并不总是准确的。这里需要特别注意,Oracle数据库的执行计划里面也有rows列,不过代表结果的行数,含义不一样
filtered:被条件过滤的行数百分比。最大值为100,表示没有行过滤,值从100减小表示过滤增加。rows表示检查的行数,rows * filtered/100表示过滤后的行数,也就是与下表进行连接的行
Extra:执行计划的额外信息