Explain是什么
EXPLAIN是用于分析 SQL 查询执行计划的关键字或命令。当在数据库管理系统中执行EXPLAIN加上要分析的查询语句时,它不会实际执行该查询,而是告诉数据库系统解释该查询的执行计划。
执行计划是数据库优化器根据查询的条件、表结构和索引等信息所做的判断,确定查询的最佳执行方式。通过执行EXPLAIN,你可以了解数据库系统在执行查询时选择了怎样的执行路径和策略,有助于评估查询的性能和优化查询。
explain 输出信息
ID: 操作的序列号或顺序标识符,显示查询执行的顺序。
ID主要用于表示查询执行的顺序,ID较大代表越后执行的步骤。
Select Type:查询的类型,例如简单查询、联接查询、子查询等。
Select Type字段表示查询执行的类型,说明了数据库系统执行查询时所采取的方式。不同的数据库管理系统可能会有不同的Select Type类型,以下是一些常见的类型及其含义:
- SIMPLE(简单查询):单表查询或不涉及子查询的简单查询。 PRIMARY(主查询):复杂查询中最外层的查询。
- SUBQUERY(子查询):在查询中包含了子查询。
- DERIVED(衍生表):在FROM子句中,使用了派生表,通常是嵌套在FROM子句中的子查询结果。
- UNION(联合查询):使用了UNION、UNION ALL等联合操作进行多个查询的合并。 DEPENDENT
- SUBQUERY(相关子查询):子查询依赖于外部查询中的值。 UNCACHEABLE
- SUBQUERY(不可缓存的子查询):子查询无法被缓存,通常是由于查询中使用了不可缓存的函数或变量。 UNION
- RESULT(联合结果):UNION操作后的结果。 DEPENDENT UNION(相关联合查询):UNION操作中依赖于外部查询的值
- DEPENDENT UNION RESULT(相关联合结果):UNION操作后的结果依赖于外部查询。 DERIVED
- UNION(衍生联合查询):在FROM子句中使用了UNION操作。
Table:查询涉及的表名或别名。
Partitions:若查询使用了分区表,显示涉及的分区数量。
Type:表示访问表的方式,可能是全表扫描(ALL)、索引扫描(index)、范围扫描(range)等。
Possible Keys:可能用于此查询的索引列表。
Key:实际用于查询的索引,若为 NULL,则表示没有使用索引。
Key Length:使用的索引长度。
Ref:显示索引的哪一列被使用。
Rows:预估读取的行数。
Rows字段的值越小越好,因为它表示查询执行时需要读取的行数较少,通常与查询性能相关。如果Rows的估算值过大,可能表示查询存在潜在的性能问题,例如可能会导致全表扫描或读取大量数据。
Filtered:过滤条件的选择性,即根据索引选择的行数比例。
Extra:其他额外的信息,可能包括使用了临时表、文件排序、使用了某些优化器的特殊操作等。
一些常见的信息可能包括(不同的数据库系统可能会提供不同的额外信息):
1、Using index:表示查询使用了覆盖索引,即查询中涉及的字段都包含在索引中,无需访问实际数据行。
2、Using temporary/table/filesort:表示查询执行过程中使用了临时表、文件排序等操作。
3、Using where:表示查询执行了WHERE子句中的条件。
4、Using join buffer:表示使用了连接缓冲区进行连接操作。
5、Range checked for each record:对每条记录都进行了范围检查。
6、Full scan on NULL key:在使用覆盖索引时,可能出现对NULL键的全表扫描。
7、Using filesort:表示进行了文件排序操作。
8、Using index condition:表示使用了索引条件推送优化。
9、Impossible WHERE noticed after reading const tables:表示在读取常量表后发现了不可能的WHERE条件。