MySQL-explain执行计划

EXPLAIN关键字用于分析SQL查询的执行计划,提供关于表的访问方式、使用的索引和查询效率的信息。它显示了查询类型(如SIMPLE、SUBQUERY)、表的连接类型(如ALL、INDEX、range)、实际使用的索引和预计扫描的行数等关键指标,帮助开发者优化查询性能。
摘要由CSDN通过智能技术生成

explain关键字可以模拟优化器执行SQL语句,分析查询语句的性能

在select语句之前增加explain关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息,并不会执行这条SQL

explain执行计划

  • id:select语句标识符
id表示查询语句的序号,自动分配,顺序递增,值越大,执行优先级越高;id相同时,优先级由上而下

  • select_type:select语句查询类型
select_type表示查询类型,常见的有SIMPLE简单查询、PRIMARY主查询、SUBQUERY子查询、UNION联合查询、UNION RESULT联合临时表结果等

  • table:查询用到的表
table表示SQL语句查询的表名、表别名、临时表名

  • partitions:查询匹配到的分区
partitions表示SQL查询匹配到的分区,没有分区的话显示NULL

  • type:表连接类型或者数据访问类型
type表示表连接类型或者数据访问类型,就是表之间通过什么方式建立连接的,或者通过什么方式访问到数据的

具体有以下值,性能由好到差依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

system:当表中只有一行记录时,也就是系统表,时const类型的特列

const:表示使用主键索引或者唯一索引进行查询时,最多返回一条数据。性能较好,推荐使用

eq_ref:表示表连接使用到了主键或者唯一索引

ref:表示使用了非唯一索引进行查询

ref_or_null:表示使用了非唯一索引进行查询,并且包含了null值的行

index_merge:表示用到索引合并的优化逻辑,即用到的多个索引

range:表示使用到了索引范围查询

index:表示使用索引进行全表扫描

ALL:表示全表扫描,性能最差

  • possible_keys:可能用到的索引
表示可能用到的索引列,实际查询并不一定能用到

  • key:实际用到的索引
表示实际查询用到索引列

  • key_len:索引长度
表示索引所占的字节数

每种类型所占的字节数如下

类型占用空间
char(n)n个字节
varchar(n)2个字节存储变长字符串,如果时utf-8,则长度3n+2
tinyint1个字节
smallint2个字节
int4个字节
bigint8个字节
date3个字节
timestamp4个字节
datetime8个字节
  • ref:查询条件中的列
表示where语句或者表连接中与索引比较的参数,常见的有const(常量)、func(函数)、字段名

如果没用到索引,则显示为NULL。

  • rows:预计扫描的行数
表示执行SQL语句所扫描的行数

  • filtered:过滤行所占百分比
表示按条件过滤的表行的百分比

  • Extra:附加信息
表示一些额外的扩展信息,不适合在其他列展示,却又十分重要

Using where:表示使用了where条件搜索,但没有使用索引

Using index:表示用到了覆盖索引,即在索引上就查到了所需数据,无需二次回表查询,性能较好

Using filesort:表示使用了外部排序,即排序字段没有用到索引

Using temporary:表示用到了临时表,下面的示例中就是用到临时表来存储查询结果

Using join buffer:表示在进行表关联的时候,没有用到索引,使用了连接缓存区存储临时结果

下面的示例中cert_no在两张表中都没有建索引

Using index condition:表示用到索引下推的优化特性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coo_lw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值