explain执行计划学习1
执行计划作用是如下:
- 表的读取顺序
- 数据读取操作的操作类型
- 哪些索引可以使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
1.1 id
select查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序
id号分为三种情况:
1、如果id相同,那么执行顺序从上到下
id一样(注意执行计划的table列),left join 先扫描e表,再扫描d表;right join 先扫描d表,再扫描e表。
2、如果id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
我们可以看到d表中select_type为 SUBQUERY 也就是子查询的 意思),然后根据d表中的deptno去查询 e表中的数据。
3、id相同和不同的,同时存在:相同的可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先执行
在这里先从id为2的执行,如果id是一样的,就按照上到下的顺序执行;
Type 连接类型分几种情况:
-
该表只有一行(= 系统表)。这是
const
连接类型的一个特例。 -
该表最多有一个匹配行,该行在查询开始时读取。由于只有一行,因此优化程序的其余部分可以将此行中列的值视为常量。
const
表非常快,因为它们只读取一次。
效率从最好到最坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般情况下,得保证查询至少达到range级别,最好能达到ref 。
--range:表示利用索引查询的时候限制了范围,在指定范围内进行查询,这样避免了index的全索引扫描,适用的操作符: =, <>, >, >=, <, <=, IS NULL, BETWEEN, LIKE, or IN()
--index_subquery:利用索引来关联子查询,不再扫描全表
-unique_subquery:该连接类型类似与index_subquery,使用的是唯一索引
--ref:使用了非唯一性索引进行数据的查找
--eq_ref :使用唯一性索引进行数据查找
--index:全索引扫描这个比all的效率要好,主要有两种情况,一种是当前的查询时覆盖索引,即我们需要的数据在索引中就可以索取,或者是使用了索引进行排序,这样就避免数据的重排序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端