Explain详解与索引最佳实践

本文详细解析了MySQLExplain命令的各个字段含义,包括查询类型(如simple、subquery、derived、primary)、表操作、执行顺序、索引使用情况等,重点讨论了为何有时选择二级索引而非主键索引,以及如何优化查询以提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

听课问题(听完课自己查资料)

  1. type中常用类型详细解释 null <- system <- const <- er_ref <- ref <- range <- index <- all

Explain 各列解释

EXPLAIN SELECT
	* 
FROM
	actor
	LEFT JOIN film_actor ON actor_id = actor.id;

1. id

代表执行的先后顺序 比如现在依次有 3、2、1、2 那么执行顺序就是 3、2(第一次出现的2) 、2(第二次出现的2)、1

总结:越大执行越靠前,如果id形同那么最先出现的最先执行

2. select_type

分为四种类型 simple、subquery、derived、primary

a. simple

简单查询比如就一个简单的单条语句查询 EXPLAIN SELECT * FROM actor;

例如这样单表查询 没有进行关联查询也没有关联其他表有临时表查询

b. subquery

在select后面的称为 subquery类型 比如这个查询

EXPLAIN SELECT (SELECT id FROM film_actor) as id FROM actor;

其中select后面括号中的就是一个subquery类型

c. derived

是跟在from后面组成的临时表,如下SQL

EXPLAIN SELECT te.* FROM (SELECT * FROM actor) as te;

其中from后面又跟了一个子查询并且这个子查询自己构建了一个临时表 所以这个子查询就是derived类型

d. primary

最外层的查询语句

3. table

就是当前这一列正在查询的表名称
但是如下图

explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der;

因为有构建一个临时表,所以上边id=1的一列是一个临时表并没有真正的名称,但是id=3那一条正是构建这个临时表的子查询sql 所以显示 <derived3>后面的3就是指向的id 这个示例表示临时表是id=3的子查询sql生成的。

4. type

分为好多种,常见的有(最优在前): null - system - const - eq_ref - ref - range - index - all

a. null

速度是最快的,相当于没有经过这张表查询或者索引

explain select min(id) from film;

上边这个根据主键id 查询最小的主键id,在主键索引中都是排序的,所以第一个id肯定就是整张表中最小的,所以查询的时候什么都不用管无脑拿表中第一个id就行了,那么肯定是最快的,因为后面有什么数据根本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值