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 连接类型分几种情况:

  • system

    该表只有一行(= 系统表)。这是const连接类型的一个特例。

  • 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的效率要好,主要有两种情况,一种是当前的查询时覆盖索引,即我们需要的数据在索引中就可以索取,或者是使用了索引进行排序,这样就避免数据的重排序。

 

posted @ 2022-01-10 15:08  beawh  阅读(30)  评论(0编辑  收藏  举报