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

执行计划是为了帮助优化SQL语句而存在的。在MySQL中, 可以通过以下两种方式找到执行计划:

1. 使用EXPLAIN语句

`EXPLAIN`语句可以用来分析SQL语句的执行计划并返回优化的结果。其语法如下:

EXPLAIN SELECT * FROM table_name WHERE condition;

这条SQL语句可以帮助我们获得如下信息:

- ID:查询中执行select子句或操作表的顺序标识符

- select_type:表示表的连接类型,有三种类型:SIMPLE、PRIMARY、SUBQUERY

- table:表示查询的表名

- partitions:表示查询中使用的分区数量

- type:表示MySQL在表中找到所需行的方式,例如:ALL、index、range、ref、eq_ref、const、system、null

- possible_keys:表示查询中可能使用的索引

- key:表示MySQL实际使用的索引

- rows:表示MySQL沿着表的索引返回的行数

- filtered:表示查询结果的过滤程度

- Extra:附加信息,包括启用优化器的信息、查询是否使用缓存等。

通过`EXPLAIN`语句, 我们可以分析出SQL语句执行的效率, 并且可以对执行计划进行优化。

2. 使用MySQL的性能分析工具

MySQL自带了一个性能分析工具PERFORMANCE_SCHEMA,可以用来跟踪和监控MySQL实例中的所有活动。在PERFORMANCE_SCHEMA中, 我们可以使用跟踪功能来获取执行计划。

具体方法如下:

(1)开启跟踪功能

在MySQL客户端中输入以下命令可以查看当前的跟踪状态:

SHOW VARIABLES LIKE 'performance_schema';

如果结果中值为ON,则表示PERFORMANCE_SCHEMA已经启用;如果值为OFF,则需要手动开启。

在my.cnf配置文件中添加以下参数可开启PERFORMANCE_SCHEMA:

[mysqld]

performance_schema=on

(2)开启跟踪事件

在MySQL客户端中执行以下命令可以开启跟踪事件:

SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE '%statement/explain%';

如结果集中含有statement/explain,则表示已开启跟踪功能,否则需要根据结果集中的结果开启相应的跟踪事件。

(3)查看执行计划

执行以下命令开启跟踪功能后,再次执行需要分析的SQL语句:

SET PERSIST performance_schema.trace_enable = true;

在执行时需要添加`EXPLAIN`关键字,如下所示:

EXPLAIN SELECT * FROM table_name;

执行后,查看跟踪事件是否已经结束:

SELECT * FROM performance_schema.events_statements_summary_by_digest WHERE digest_text LIKE 'SELECT * FROM table_name%';

如果`DIGEST_TEXT`列中出现SQL语句,则表示跟踪事件已经结束,执行计划数据已经记录到性能模式表中。

我们可以在`performance_schema`库中的`events_stages_summary_by_digest`表中查看执行计划数据。

MySQL执行计划是一个非常有用的工具,可以帮助开发人员识别查询的瓶颈并优化查询性能。MySQL的执行计划是一种描述MySQL如何执行查询的方式。它告诉MySQL如何访问表中的数据,并使用哪些索引来检索行,以及如何使用排序和聚合等其他技术来处理数据。

要查看MySQL执行计划,可以使用EXPLAIN查询。EXPLAIN查询会解释MySQL将如何执行查询,并输出执行计划。以下是一个基本的EXPLAIN查询:

EXPLAIN SELECT * FROM mytable WHERE id = 1;

此查询将输出一些列,包括id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra等。这些列提供了有关MySQL如何执行查询的详细信息。

- id:表示查询标识符,表示查询中的每个操作顺序的编号,例如SELECT、JOIN、UNION等。

- select_type:表示查询类型,例如SIMPLE、PRIMARY、UNION、SUBQUERY等。

- table:表示名为每个表的名称。

- type:表示MySQL选择如何从表中读取行。这是一个重要的指标,因为它显示了MySQL如何访问表中的数据。常见的值包括ALL、index、range、ref、eq_ref、const等。

- possible_keys:表示可能用于此查询的索引。

- key:表示实际使用的索引。

- key_len:表示MySQL使用的索引的长度。

- ref:在索引中使用哪些列或常量与表中列进行比较。

- rows:估计要读取和检查的行数。

- Extra:包含其他有关查询执行的详细信息,例如使用了哪个索引、执行了哪个join等。

根据执行计划,可以更好地理解MySQL如何处理查询。如果MySQL正在执行不当的查询,可能会看到性能瓶颈,并需要对查询进行优化。通过观察执行计划,可以找到潜在的性能问题,并尝试进行优化。