MySQL的执行计划explain的使用

本文详细介绍了MySQL的explain命令在分析SQL查询性能中的作用,包括执行顺序、select_type的不同类别、访问类型以及如何利用索引来优化查询。通过理解这些关键概念,开发者可以更好地诊断和优化查询性能。
摘要由CSDN通过智能技术生成

MySQL的执行计划explain的使用

1、explain的简介

explain是sql分析工具,可以模拟优化器执行查询语句,帮助我们发现查询瓶颈、优化查询语句

作用:

表的读取顺序

可能使用到的索引

实际使用到的索引

sql执行时的查询类型

每张表有多少数据被扫描

sql语句性能分析

2、id

每个select都有一个对应的id,id列是自增的

如果id序号相同,执行顺序为从上往下

如果id序号不相同,执行顺序为id大的先执行

如果即存在id相同和id序号大的情况,先执行序号大的,id相同的从上往下执行

如果id存在null的,最后执行,表示结果集,并且不需要他来查询

3、select_type

表示select查询时执行的查询执行类型

simple:简单查询,不包含union和子查询

EXPLAIN SELECT
	* 
FROM
	t_user

在这里插入图片描述

primary:复杂查询中最外层查询,比如使用union和union all时,id为1的select_type通常为primary

EXPLAIN SELECT
	id 
FROM
	t_USER UNION
SELECT
	id 
FROM
	t_order;

在这里插入图片描述

subquery: select中出现子查询语句,结果不依赖于外部查询(不在from语句中)

EXPLAIN SELECT t_user.*,( SELECT user_id FROM t_order WHERE id = 1 ) 
FROM
	t_user;

在这里插入图片描述

dependent subquery: select中出现子查询语句,结果依赖于外部查询

EXPLAIN SELECT
	t_user.*,
	( SELECT DISTINCT user_id FROM t_order WHERE user_id = t_user.id ) 
FROM
	t_user;

在这里插入图片描述

**derived:**派生表,在from子句的查询语句中,表示数据从外部数据推导而来,而不是从select语句中的其他列选择

select * from (select id,username from user where id=1) as temp	

union : 分为union和union all 两种,如果第二个select 语句在union之后,则被标记为union,如果union被包含在from中,则第一个select被标记为drived

union会去重,union all不会去重

EXPLAIN SELECT
	* 
FROM
	( SELECT id FROM t_product WHERE price = 10 UNION SELECT id FROM t_user WHERE NAME = '张三' UNION SELECT id FROM t_order WHERE id = 2 ) AS temp

在这里插入图片描述

dependent union: 当union作为子查询,第一个union为dependent subquery ,第二个union为dependent union

EXPLAIN SELECT
	* 
FROM
	t_order 
WHERE
	id IN (
	SELECT
		id 
	FROM
		t_product 
	WHERE
		price = 10 UNION
	SELECT
		id 
	FROM
		t_user 
	WHERE
		NAME = '张三' UNION
	SELECT
		id 
	FROM
		t_order 
	WHERE
	id = 2 
	)

在这里插入图片描述

3、table

select执行时查询的表名

4、partitions

表分区情况

5、type

select执行时所使用的访问类型

效率由高到低分别为:system->const->eq_ref->ref->range->index->all

6、possible_keys

可能使用的索引

7、key

实际使用的索引

8、key_len

使用的索引长度

9、ref

10、rows

11、filtered

12、Extra

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值