≫ 性能分析
SHOW PLAN SQL 语句和 "plan": N JSON 接口选项显示查询执行计划。计划在实际执行过程中生成并存储,因此在 SQL 的情况下,必须在当前会话中在运行该语句之前启用分析。可以通过 SET profiling=1 语句完成此操作。
在 SQL 模式下返回两个项目:
transformed_tree,显示全文查询的分解文本。enabled_indexes,提供有关有效二级索引的信息。
要在 JSON 查询中查看查询执行计划,请在查询中添加 "plan": N。结果将作为结果集中的 plan 属性出现。N 可以是以下之一:
- 1 - 仅显示根节点的文本计划,类似于
SHOW PLANSQL 查询返回的内容。这是最紧凑的形式。 - 2 - 仅显示 JSON 对象计划,便于处理。
- 3 - 显示带有每个节点文本描述的 JSON 对象。请注意,子节点的描述也存在,并且重复了父节点描述的一部分,这使得整个表示相当庞大。
- SQL
- JSON
📋
set profiling=1;
select * from hn_small where match('dog|cat') limit 0;
show plan;Response
*************************** 1. row ***************************
Variable: transformed_tree
Value: OR(
AND(KEYWORD(dog, querypos=1)),
AND(KEYWORD(cat, querypos=2)))
*************************** 2. row ***************************
Variable: enabled_indexes
Value:
2 rows in set (0.00 sec)在某些情况下,由于扩展和其他转换,评估的查询树可能与原始查询树有很大不同。
- SQL
- JSON
📋
SET profiling=1;
SELECT id FROM forum WHERE MATCH('@title way* @content hey') LIMIT 1;
SHOW PLAN;Response
Query OK, 0 rows affected (0.00 sec)
+--------+
| id |
+--------+
| 711651 |
+--------+
1 row in set (0.04 sec)
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable | Value |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| transformed_tree | AND(
OR(
OR(
AND(fields=(title), KEYWORD(wayne, querypos=1, expanded)),
OR(
AND(fields=(title), KEYWORD(ways, querypos=1, expanded)),
AND(fields=(title), KEYWORD(wayyy, querypos=1, expanded)))),
AND(fields=(title), KEYWORD(way, querypos=1, expanded)),
OR(fields=(title), KEYWORD(way*, querypos=1, expanded))),
AND(fields=(content), KEYWORD(hey, querypos=2))) |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)另请参见 EXPLAIN QUERY。它显示全文查询的执行树,而不实际执行查询。请注意,当在实时表查询后使用 SHOW PLAN 时,结果将基于随机的磁盘/RAM 块。因此,如果您最近修改了表的分词设置,或者块在字典等方面差异较大,您可能无法获得预期的结果。请考虑这一点,并考虑同时使用 EXPLAIN QUERY。
query 属性包含转换后的全文查询树。每个节点包含:
type:节点类型。可以是AND、OR、PHRASE、KEYWORD等。description:该节点的查询子树,以字符串形式显示(SHOW PLAN格式)。children:子节点(如果有)。max_field_pos:字段内的最大位置。word:转换后的关键词。仅关键词节点。querypos:该关键词在查询中的位置。仅关键词节点。excluded:关键词是否被排除在查询之外。仅关键词节点。expanded:关键词是否由前缀扩展添加。仅关键词节点。field_start:关键词必须出现在字段的开头。仅关键词节点。field_end:关键词必须出现在字段的结尾。仅关键词节点。boost:关键词的 IDF 将乘以此值。仅关键词节点。
SHOW PLAN format=dot 允许以分层格式返回全文查询执行树,适合使用现有工具进行可视化,例如 https://dreampuf.github.io/GraphvizOnline:
MySQL [(none)]> show plan option format=dot\G
*************************** 1. row ***************************
Variable: transformed_tree
Value: digraph "transformed_tree"
{
0 [shape=record,style=filled,bgcolor="lightgrey" label="AND"]
0 -> 1
1 [shape=record,style=filled,bgcolor="lightgrey" label="AND"]
1 -> 2
2 [shape=record label="i | { querypos=1 }"]
0 -> 3
3 [shape=record,style=filled,bgcolor="lightgrey" label="AND"]
3 -> 4
4 [shape=record label="me | { querypos=2 }"]
}

Last modified: August 28, 2025