怎么看mysql执行计划
时间 : 2023-03-20 04:30:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

MySQL执行计划是指MySQL优化器预估执行某个SQL语句时,会生成一个可执行计划。执行计划是 MySQL 对 SQL 语句执行步骤的计划,包括表的读取方式、数据的查找方式、连接方式、排序方式,以及使用的索引等信息。

可以通过EXPLAIN关键词来查看SQL语句的执行计划,EXPLAIN关键词后接SQL语句。执行EXPLAIN关键字后,MySQL会生成一个执行计划,包含查询要按照什么顺序执行,各个子查询或JOIN之间的数据如何传递,以及如何检索和访问表。

除此之外,EXPLAIN关键字会生成一个结果集,该结果集包含了查询语句的执行计划,以及一些统计信息,例如使用的索引、扫描的行数、扫描速度、排序等信息。

在执行计划中,有一些比较重要的指标:

1. id:查询的编号,每个查询都有唯一的ID。

2. select_type :查询的类型,常见的类型有 SIMPLE、PRIMARY、UNION、UNION RESULT、DERIVED 等。

3. table :查询的表名。

4. type: 查询时的访问方式,常见的访问方式有 ALL(全表扫描)、index(使用索引扫描)、range(索引范围扫描)、ref(使用非唯一索引扫描)、eq_ref(使用唯一索引扫描)和const(使用常量进行比对)等。

5. possible_keys和key: possible_keys 列显示可能用到的索引,key 列显示实际用到的索引。如果没有使用索引,则该列为 NULL。

6. rows: 表示处理查询所需要扫描的行数。

7. Extra: 显示关于查询的描述信息,如果出现“Using filesort”、“Using temporary” 等字样,通常意味着 MySQL 在执行查询时还需要进行额外的工作。

通过对执行计划的分析,可以确定查询是否有优化的余地,例如可以尝试使用索引等优化策略来提高查询的性能。

MySQL执行计划,也叫查询执行计划,是指MySQL优化器在优化查询时所生成的一种分析结果。它可以帮助我们分析SQL查询的优化情况,判断SQL语句的执行效率,找到执行效率低下的SQL语句或语句中存在的问题,更好地优化SQL查询。

MySQL查询执行过程包括以下几个步骤:SQL语句解析、预处理、优化以及执行。在查询执行过程中,MySQL优化器会根据表结构、索引情况、统计信息等信息,生成一种执行计划。执行计划由一棵树形结构组成,叫做查询执行计划树或查询计划加树。每个节点都表示一个执行计划的操作,比如扫描表、使用索引、排序等。

查询执行计划可以通过EXPLAIN语句来获取。EXPLAIN语句可以模拟执行SQL查询,并返回查询执行计划。例如:

EXPLAIN SELECT * FROM `table` WHERE `id`='1';

执行上述SQL语句后,MySQL会返回如下的查询执行计划结果:

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

| 1 | SIMPLE | table | const | PRIMARY | PRIMARY | 4 | const | 1 | |

+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

查询执行计划结果包含以下字段:

- id:执行计划的标识符,用于标识查询中每个SELECT子句的操作序列号。在一个SELECT语句中,同级别的id值相同;子级别的值为父级别的id加“.”再加子级别的序号。

- select_type:SELECT的类型,一般有SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION等几种类型。

- table:显示该行数据要从哪张表中读取。

- type:访问类型,表示MySQL选择的查找策略。比如:ALL、index、range、ref、eq_ref、const等类型。

- possible_keys:表示MySQL能使用的索引,可用过的索引一般在该列中出现。

- key:表示MySQL实际使用的索引,如果为null,表示没有使用索引或没有使用合适的索引。

- key_len:表示索引字段的长度。

- ref:表示索引的哪一列或常量与表的哪一列进行比较。

- rows:表示MySQL估算使用该帮助读取所需的行数。

- extra:表示其他信息,比如:Using filesort、Using temporary等。

通过分析查询执行计划,我们可以根据MySQL的选择策略和索引情况,进一步优化SQL查询。一些常见的优化问题包括:使用索引查询、避免表扫描、减少join操作、避免多余的排序和分组等。