面试被问如何排查慢查询(执行计划)怎么办?愣着干嘛?进来白嫖呀!

本文详细解析了如何使用explain关键字分析MySQL查询的执行计划,包括联表、子查询、union等多种情况,帮助理解SQL执行过程,优化查询性能。
摘要由CSDN通过智能技术生成

一、阅读前

其实录制了一个视频专门讲解这篇文章,视频中讲的比下文还全哦


视频链接:

https://mp.weixin.qq.com/s/wGcODm6gfy6JOvkcKp-8MA

https://mp.weixin.qq.com/s/wGcODm6gfy6JOvkcKp-8MA

Oow!

想白嫖explain实战部分用到的建库SQL、存储过程等脚本可以通过上面的视频链接关注,后台回复:explain即可领取哦~

二、explain 实战

2.1、初识执行计划:

获取sql执行计划的语法:explain yoursql

explain select * from t1;

字段名 作用
id sql中的每一个select都有一个未对应的id,对子查询来说,有多个select,就有多个id。
select_type sql执行计划对应的查询类型。如:
1.针对单表查询或者是多表连接查询的select type是simple。
2.union语句针对前半部分sql的select_type为primary,针对后半部分sql的select_type为union,做去重时的select_type是union result。3.sql中出现子查询时,外层的select_type为primary,内层的select_type一般为subquery
table 你的sql要查询哪个表
partitions 分区表
type 针对该表查询时的查询方式。如:
1.聚簇索引的const
2.二级索引的查询ref(ref、eq_ref、ref_or_null)、range
3.对二级索引的全表扫描index
4.对聚簇索引的全表扫描的all
possible_keys 有哪些索引可以选择
key 实际选择的索引
key_len 索引的长度
ref 和上面选中key进行比较时,是等值匹配(const)还是其他的字段(库名.表名.列名)
rows 估算的可能会读取的数据条数
filtered 过滤比例,真实数据*过滤比例为预计将读取出来的数据
extra 额外的说明数据,如:
1.sql中有where条件时,Extra为:Using Where
2.sql中使用二级索引时,Extra为:Using Index
3.sql中有join语句多表关联时:Extra为:Using join buffer(Block Nested Loop)
4.sql操作产生临时表时,Extra为:Using temporary
5.sql需要根据某个字段排序,且内存不够时(不管是不是索引):Extra为:Using filesort
2.2、分析联表SQL的执行计划

SQL如下:

mysql> explain select * from t1 join t2;

SQL执行时,会先将驱动表t1中的数据以全表扫描的方式检索出来放在内存中,一共检索4行。然后在将t2表中的数据检索出来,和t1中的数据join在一起作为返回值。由于我们没有加任何where条件,这里还会存在一个笛卡尔积,也就是说结果中会有16条数据

执行计划解析:

id:每一个select 关键字对应一个id,这条SQL中只有一个select,所以这两行执行计划的id都是1

select_type:均是simple 简单的查询方式。

table:查询了哪张表

Partitions:分区

type:ALL表示全表扫描

possible_keys:可能使用到的索引,null表示,没有任何索引 key:null表示实际上也没有使用到索引

key_len:最长的索引的长度

ref:当你使用到索引时,索引列是等值匹配还是其他的连接方式,由于我们都没有索引,所以直接为null

rows:估算的扫描行数

filterd:过滤的比例,实际数量*过滤比例 ≈ 本次查询返回的行数

Extra:其他的信息

2.3、分析子查询SQL的执行计划

SQL如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值