【mysql 详解】mysql explain 使用详解

explain 简介

MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.

输出格式(字段)

  • id
  • select_type
  • table
  • partitions
  • type
  • possible_keys
  • ket
  • ref
  • rows
  • filtered
  • extra

select_type

表示查询类型

  • SIMPLE

查询不包含union 和子查询

  • PRIMARY

最外层的查询

  • UNION

UNION的第二或者随后的查询

  • DEPENDENT UNION

union的第二个或者后面的查询语句

  • UNION RESULT

union的结果

  • SUBQUERY

子查询中第一个select

  • DENPENDENT SUBQUERY

子查询中第一个select ,取决于外面的查询

table

表示查询涉及的表或衍生表

type

判断查询是全表查询还是索引扫描

  • system

表中只有一条数据,特殊的const类型

  • const

针对主键或这唯一索引查询,最多返回一条数据。

  • eq_ref

多表join查询,表示前表都能匹配到后表的结果

  • ref

使用了最左前缀规则索引的查询(针对于非唯一或者非主键索引)

  • range

表示使用索引范围查询, 当 type 是 range 时, 那么 EXPLAIN 输出的 ref 字段为 NULL, 并且 key_len 字段是此次查询中使用到的索引的最长的那个

  • index

全索引扫描(扫描所有的索引)

index 类型通常出现在: 所要查询的数据直接在索引树中就可以获取到, 而不需要扫描数据. 当是这种情况时, Extra 字段 会显示 Using index.

  • all

全表扫描

性能比较

system 》 const 》 eq_ref 》 ref 》 range 》 index 》 all

possible_keys

查询时可能使用的索引。

key

查询中真正使用的索引

ken_len

查询优化器使用了索引的字节数。评估组合是否完全使用,或者只有最左部分被使用。

rows

MySQL 查询优化器根据统计信息, 估算 SQL 要查找到结果集需要扫描读取的数据行数.
这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好.

Extra

  • Using filesort

表示 MySQL 需额外的排序操作, 不能通过索引顺序达到排序效果

  • Using index

“覆盖索引扫描”, 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错

  • Using temporary

查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.

最左前缀匹配

在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配

  • 索引的字段可以是任意顺序的
以下两种都能走索引 :
KEY test_col1_col2_col3 on test(col1,col2,col3);

SELECT * FROM test WHERE col1=“1” AND clo2=“2”
SELECT * FROM test WHERE col2=“2” AND clo1=“1”
  • 遇到范围查询时, 就停止索引的匹配

参考

MySQL 性能优化神器 Explain 使用分析

Mysql联合索引最左匹配原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值