MySQL - explain详解
2019-07-14 / 3 min read
Explain详解
-
ID列
ID值不同时, 执行计划由ID大的向ID小读; ID值相同时, 执行计划由上到下读
-
SELECT_TYPE列
值 含义 SIMPLE 不包含子查询或UNION操作的查询 PRIMARY 查询中如果包含了子查询,那么最外层的查询会被标为primary SUBQUERY select列表中的子查询 dependent subquery 依赖外部结果的子查询 Union Union操作的第二个表之后的查询值为union Dependent union 当union作为子查询, 第二或第二个后的查询select_type Union result union产生的结果集 Derived 出现在from子句中的子查询 -
table列
表的名称或者表的别名.
unionM,N 由ID为M,N查询union产生的结果集
derivedN or subqueryN 表示由ID为N的查询产生结果集
-
partition列
对于分区表, 显示查询的分区id; 非分区表显示NULL
-
Type列
查询中使用了联结的类型
值 含义 System 这是const联接类型中的一个特例, 当查询的表中只在一行显示 const 表中有且只有一个匹配的行时使用, 如主键或者唯一索引的查询 eq_ref 唯一索引或主键查找, 对于每个索引键, 表中只有一条记录与之匹配 ref 非唯一索引查找, 返回匹配某个单独值的所有行 ref_or_null 类似于ref类型的查询, 但是附加了对NULL值列的查询 index_merge 表示使用了索引合并 range 索引范围 index Full index Scan全索引扫描, all 全表扫描 -
Extra列
值 含义 Distinct 优化distinct操作, 找到第一匹配的元组后暂停找同样值的动作 Not Exists 使用Not Exists来优化查询 Using filesort 使用额外操作进行排序 Using index 使用了覆盖索引进行查询 Using temporary 需要使用临时表处理查询 Using where 需要在服务层使用where条件过滤 select tables optimized away 直接通过索引来获得数据, 不用访问表 -
possible_keys 列
指出MySQL能使用哪些索引来优化查询, 查询列所涉及的列上的索引都会被列出, 但不一定会被使用.
-
Key列
查询优化器优化查询实际所使用索引列
-
Key_len列
表示索引字段的最大可能长度
-
ref列
表示哪些列或常量被用于查询索引列上的值
-
rows列
表示MySQL通过索引统计信息, 估算的需要读取的行数, 是一个统计抽样结果, 并不十分准确
-
filtered列
表示返回结果的行数占需要读取行数的百分比, 值越大越好