MySQL Explain解释

MySQL Explain

explain提供有关MySQL如何执行语句的信息,查看sql是怎样运行的,从而进行调优。MySQL官方文档
语法很简单,在sql语句之前加上explain就可以,如:EXPLAIN SELECT * FROM sys_user
查询结果如下:
在这里插入图片描述

输出列
解释json名称
id查询语句标识select_id
select_type查询的类型None
table当前行所查的表table_name
partitions匹配的分区partitions
type访问的类型access_type
possible_keys查询可能用的索引possible_keys
key实际选择索引key
key_len索引key的长度key_length
ref与索引比较的列ref
rows查询扫描的行数,预估值,不一定准确rows
filtered按表条件过滤的行百分比filtered
Extra附件信息None
列的详解
  1. id: 查询顺序标识,sql由大到小执行。相同时从上往下执行。
  2. select_type: sql类型。如下:
    (1)SIMPLE:SELECT查询
    (2)PRIMARY:最外面的SELECT
    (3)SUBQUERY :子查询SELECT
    (4)DEPENDENT SUBQUERY : 子查询中的第一个SELECT,取决于外部查询
    (5)DELETE:删除
    (6)UPDATE:更新
    (7)INSERT:增加
    (8)UNION:UNION后面的SELECT
    (9)UNION RESULT:UNION的结果
    (10)DEPENDENT UNION: UNION中的第二个或更高的SELECT语句,取决于外部查询
    (11)DERIVED:派生表——该临时表是从子查询派生出来的,位于from中的子查询
    (12)UNCACHEABLE :SUBQUERY: 无法缓存结果的子查询,必须为外部查询的每一行重新计算
    (13)UNCACHEABLE UNION: 在UNION中的第二个或更晚的选择属于不可缓存的子查询
  3. table:每一行引用的表名,真实表名或别名
  4. partitions:查询将匹配记录的分区。该值适用NULL于未分区的表
  5. type:从上到下效率依次降低
    (0)null:没有查询表的时候才是null,比如:select ‘a’;
    (1)system:const的一种特例,表中只有一行数据
    (2)const:单表中最多只有一个匹配行(主键或者唯一索引)
    (3)eq_ref:最多只返回一条符合条件的记录,通过使用在两个表有关联的字段的时候
    (4)ref:指的是使用普通的索引(normal index)
    (5)fultext:全文索引
    (6)ref_or_null:跟ref相识,多一个不能为null的条件
    (7)index_merge:此连接类型表示使用了索引合并优化。在这种情况下,输出行中的 key 列包含使用的索引列表,key_len包含所用索引的最长 key 部分列表
    (8)unique_subquery:在使用 in 查询的情况下会取代 eq_ref
    (9)range: 对索引进行范围扫描。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可以使用 range
    (10)index:类似全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
    (11)ALL:全表扫描

注:《阿里巴巴Java开发规范》推荐 SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是consts最好

  1. possible_keys:MySQL可能采用的索引,但并不一定使用
  2. key:MySQL真正使用的索引名称
  3. key_len:索引的长度
  4. ref:列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
  5. rows:预估扫描的行数,只能参考,不准确
  6. filtered:查询的表行占表的百分比,值越大越好
  7. Extra:该列包含了很多额外的信息,包括是否文件排序,是否有临时表等,很多时候这个字段很有用能提供很多信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值