MySQL EXPLAIN 输出信息解读

一条查询语句执行过程

sql执行过程

EXPLAIN 基本语法

explain [extended|partition]select

explain

字段说明

字段 说明
id 执行编号,标识 select 所属的行。如果在语句中没子查询或关联查询,只有唯一的 select,每行都将显示 1。否则,内层的 select 语句一般会顺序编号,对应于其在原始语句中的位置
select_type 显示本行是简单或复杂select。如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUlT)
table 访问查询的表名或表别名
partitions 查询访问的分区
type 表的访问类型( MySQL 如何查询表中的行记录)效率高低:const / eq_ref / ref / range / index / all
possible_keys 可能使用的索引
key 实际使用的索引
key_len 实际使用的索引长度(单位:字节)
ref 用于索引查找的值的来源,如果值未常量,则 refconst
rows 预计查询需要扫描的行数(在表或索引树中)
filtered 查询条件所过滤的行记录数占比
Extra 额外的信息

id

id 为数值,表示在查询过程中,SELECT 语句的执行顺序

  • 如果 id 值相同,则执行顺序为:从上到下
  • 如果 id 值不同,则执行顺序为: id 值越大的越先执行
  • 如果 id 值相同,则可以认为他们是同一分组,同一分组中执行顺序为:从上到下,在所有组中, id 值越大的越先执行
  • 如果 id 值为 null ,则表示这是一个结果集

select_type

表示查询的类型

类型 说明
SIMPLE 简单查询(无 NUION、SUBQUERY 的 SELECT 语句)
PRIMARY 在复杂查询中,最外层的 SELECT 语句
UNION 在联合查询中,第二个和随后的 SELECT 语句
DEPENDENT UNION 在联合查询中,第二个和随后的 SELECT 语句,并且该 SELECT 语句依赖外层 SELECT 语句
UNION RESULT 联合查询的结果表
SUBQUERY 不在 FROM 子句中的子查询
DEPENDENT SUBQUERY 相关子查询
DERIVED 派生表(在FROM从句中的子查询)
MATERIALIZED 物化表(非关联子查询的一种优化类型)
UNCACHEABLE SUBQUERY 无法缓存的子查询
UNCACHEABLE NUION 无法缓存的联合查询

table

查询访问的表名或别名

关联优化器会为查询选择关联顺序,左侧深度优先
from 中有子查询的时候,表名是 derivedN 的形式,N 指向子查询,也就是 explain 结果中的下一列
当有 union result 的时候,表名是 union 1,2 等的形式,1,2 表示参与 unionquery id
注意:MySQL 对待这些表和普通表一样,但是这些“临时表”是没有任何索引的

partitions

partitions

type

类型 说明
NULL 不需要访问表
system 表中只有一行记录或空表,只能用 myisammemory
const 当 MySQL 对查询进行优化将其转换成常量时,就会使用这个值
eq_ref 出现在多表连接查询中,驱动表只有一行记录,同时连接字段都是非空唯一索引
ref 非唯一索引查找(或唯一索引的前缀查找)
fulltext 全文索引查找
ref_or_null ref 类型一致,只是增加了 NULL 的对比,
unique_subquery 代替 eq_ref 针对 IN 子查询的优化, IN 子句返回唯一索引
index_subquery unique_subquery 相似,但 IN 子句返回非唯一索引
range 索引范围扫描,使用 BETWEEN、IN、>、>=等运算符对索引字段值进行比较
index_merge 使用多个索引匹配查找,最终获取合并结果(交集 AND 、并集 OR )
index 全索引扫描
ALL 全表扫描

possible_keys

显示查询使用了哪些索引,表示该索引可以进行高效地查找,但是列出来的索引对于后续优化过程可能是没有用的

key

key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len

key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。

ref

ref列显示使用哪个列或常数与key一起从表中选择行。

rows

rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。

filtered

存储引擎层返回给 MySQL 后,MySQL server 层过滤后,剩下满足条件的行数比例

Extra

Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。

类型 说明
Using filesort 说明 MySQL 无法利用索引排序,进行了额外的排序
Using temporary 使用的临时表
Using index 使用索引覆盖,不需要扫描原表,直接通过索引扫描就能得到想要的数据
Using index condition 使用索引条件过滤
Using where 通过 WHERE 从句的条件来筛选存储引擎返回的行记录
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,723评论 0 44
  • explain关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句...
    Chting阅读 1,535评论 0 2
  • Mysql概述 数据库是一个易于访问和修改的信息集合。它允许使用事务来确保数据的安全性和一致性,并能快速处理百万条...
    彦帧阅读 13,674评论 10 461
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,811评论 5 116
  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,157评论 0 33