explain 分析 sql 参数说明

id: 执行顺序,越大越小执行

select_type: 查询类型

simple:表示查询中不包含子查询或者 union
primary:当查询中包含任何复杂的子部分,最外层的查询被标记成 primary
derived:在 from 的列表中包含的子查询被标记成 derived
subquery:在 selectwhere 列表中包含了子查询,则子查询被标记成 subquery
union:两个 select 查询时前一个标记为 PRIMARY,后一个标记为 UNIONunion 出现在 from 从句子查询中,外层 select 标记为 PIRMARY,union 中第一个查询为 DERIVED,第二个子查询标记为 UNION
unionresult:从 union 表获取结果的 select 被标记成 union result 

table:数据是关于哪张表的

type:重要,显示连接使用了何种类型。

最好到最差的连接类型为 system > const > eq_reg > ref > range > index > ALL
system:表中只有一行数据。属于 const 的特例。
const :查询结果最多有一个匹配行,可以被视为常量,查询速度非常快,一般情况下把主键或唯一索引作为唯一条件的查询都是 const
eq_ref:查询时查询外键表全部数据。且只能查询主键列或关联列。且外键表中外键列中数据不能有重复数据,且这些数据都必须在主键表中有对应数据
ref:比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀
range:把这个列当作条件只检索其中一个范围。
index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些
ALL:即全表扫描

 

possible_keys: 查询条件字段涉及到的索引

key:实际使用的索引。如果为 NULL,则没有使用索引。

如果想强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index。
例: 
select e.salary  from employee e  force index(employee_dept_index)
         left join  dept d on e.dept = d.id
where e.dept =1

 

key_len:表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上长度越短越好。key_len 是根据表定义计算而得的,不是通过表内检索出的。

ref:显示索引的哪一列被使用了,如果可能的话,是一个常量 const。

rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。注意这个不是结果集里的行数。

fitered:显示了通过条件过滤出的行数的百分比估计值。

Extra:MYSQL 如何解析查询的额外信息。


Distinct:发现第 1 个匹配行后,停止为当前的行组合搜索更多的行
Not exists:能够对查询进行 LEFT JOIN 优化,发现 1 个匹配 LEFT JOIN 标准的行后,不再为前面的的行组合在该表内检查更多的行。
range checked for each record (index map: #):没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。
Using filesort:需要额外的一次传递,以找出如何按排序顺序检索行。数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一般也是要考虑使用索引来优化的。
Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。(使用覆盖索引)
Using temporary:为了解决查询,MySQL 需要创建一个临时表来容纳结果。
Using where:WHERE 子句用于限制哪一个行匹配下一个表或发送到客户,并且查询的列未被索引覆盖
Using sort_union(…), Using union(…), Using intersect(…): 这 些 函 数 说 明 如 何 为index_merge 联接类型合并索引扫描。
Using index for group-by:类似于访问表的 Using index 方式,Using index for group-by 表示MySQL发现了一个索引,可以用来查 询GROUP BYDISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。

 

posted @   得好好活  阅读(246)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示