explain执行计划详解

2021年11月22日 阅读数:3
这篇文章主要向大家介绍explain执行计划详解,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

explain执行计划分析,是SQL优化的重要手段。本节内容:mysql

  • explain各属性表明的含义。
EXPLAIN SELECT * FROM department d ;

id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|
--|-----------|-----|----------|----|-------------|---|-------|---|----|--------|-----|
 1|SIMPLE     |d    |          |ALL |             |   |       |   |   2|     100|     |

id

id表示查询中执行 select 子句或操做表的顺序。id的执行顺序规则:sql

  • id越大,越先执行。
  • id相同,则按从上到下顺序执行。

id相同优化

EXPLAIN SELECT * FROM employee e ,department d ,customer c 
WHERE e.cus_id = c.id AND e.dep_id = d.id ;

image

id不一样code

EXPLAIN SELECT * FROM department 
WHERE id = ( SELECT id FROM employee WHERE id =( SELECT id FROM customer WHERE id = 1 ));

EXPLAIN SELECT * FROM department d, (SELECT dep_id FROM employee GROUP BY dep_id) t
WHERE d.id = t.dep_id;

image

select_type

  • simple:简单查询,不含子查询、UNION
  • primary:复杂查询的最外层查询
  • subquery:子查询
  • derived:当from后包含子查询时,标记为derived--临时表
  • union:union以后的标记位union,前面的是primary

table:所属表

partitions:分区

type 访问类型(很重要!!)

  • system:系统只有一条记录,不会出现。memory引擎
  • const:经过主键或者惟一索引,定位到一条数据
  • eq_ref:使用主键或者惟一性索引扫描
EXPLAIN SELECT * FROM employee e , department d 
WHERE e.id = d.id;

  • ref:非惟一性索引扫描。多出如今多表链接操做。
  • range:索引的某个范围查找
  • index:扫描索引树
  • all:全表扫描

type 最好能达到index之上。blog