MySQL性能优化之查看执行计划explain

    1. 介绍
  1. MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.
  2. 使用explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。
  3. 可以通过explain命令深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。
  4. EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 explain 就可以了, 例如:

    1. 参数说明

expain出来的信息有10列,分别是idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra,下面对这些字段进行解释:

  1. id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
  2. select_type: SELECT 查询的类型.
  3. table: 查询的是哪个表
  4. partitions: 匹配的分区
  5. type: join 类型
  6. possible_keys: 此次查询中可能选用的索引
  7. key: 此次查询中确切使用到的索引.
  8. ref: 哪个字段或常数与 key 一起被使用
  9. rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
  10. filtered: 表示此查询条件所过滤的数据的百分比
  11. extra: 额外的信息

 

    1. select_type列说明
  1. SIMPLE, 表示此查询不包含 UNION 查询或子查询
  2. PRIMARY, 表示此查询是最外层的查询
  3. UNION, 表示此查询是 UNION 的第二或随后的查询
  4. DEPENDENT UNION, UNION 中的第二个或后面的查询语句, 取决于外面的查询
  5. UNION RESULT, UNION 的结果
  6. SUBQUERY, 子查询中的第一个 SELECT
  7. DEPENDENT SUBQUERY: 子查询中的第一个 SELECT, 取决于外面的查询. 即子查询依赖于外层查询的结果.

 

    1. type列说明

通常来说, 不同的 type 类型的性能关系如下:
ALL < index < range ~ index_merge < ref < eq_ref < const < system

 

类型

含义

system

表只有一行

const

表最多只有一行匹配,通用用于主键或者唯一索引比较时

eq_ref

每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一种,特点是使用=,而且索引的所有部分都参与join且索引是主键或非空唯一键的索引

ref

如果每次只匹配少数行,那就是比较好的一种,使用=或<=>,可以是左覆盖索引或非主键或非唯一键

fulltext

全文搜索

ref_or_null

与ref类似,但包括NULL

index_merge

表示出现了索引合并优化(包括交集,并集以及交集之间的并集),但不包括跨表和全文索引。

这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的range要更优的话

unique_subquery

在in子查询中,就是value in (select...)把形如“select unique_key_column”的子查询替换。

PS:所以不一定in子句中使用子查询就是低效的!

index_subquery

同上,但把形如”select non_unique_key_column“的子查询替换

 

range 

常数值的范围

index

a.当查询是索引覆盖的,即所有数据均可从索引树获取的时候(Extra中有Using Index);

b.以索引顺序从索引中查找数据行的全表扫描(无 Using Index);

c.如果Extra中Using Index与Using Where同时出现的话,则是利用索引查找键值的意思;

d.如单独出现,则是用读索引来代替读行,但不用于查找

all

全表扫描

 

 

    1. 参考网站

https://segmentfault.com/a/1190000008131735

https://blog.csdn.net/rewiner120/article/details/70598797

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值