MySQL Workbench 手册  /  性能工具  /  可视化解释计划

7.4 可视化解释计划

可视化解释功能使用扩展 JSON 格式中可用的扩展信息来生成和显示 MySQL EXPLAIN 语句的可视化表示。MySQL Workbench 提供所有用于执行查询的 EXPLAIN 格式,包括原始扩展 JSON、传统格式和可视化查询计划。

可视化解释用法

要查看可视化解释执行计划,请从 SQL 编辑器中执行您的查询,然后在查询结果选项卡中选择 执行计划。执行计划默认设置为 可视化解释,但它还包括一个与您在 MySQL 客户端中执行 EXPLAIN 时看到的类似的 表格解释 视图。有关 MySQL 如何执行语句的信息,请参阅 使用 EXPLAIN 优化查询

可视化解释约定

可视化解释图中的执行顺序是从下到上,从左到右。以下的图表示例概述了用于表示可视化解释计划方面的图形、文本和信息约定。有关具体信息,请参阅

第一个图中的可视化解释图显示了以下查询的可视化表示。

SELECT CONCAT(customer.last_name, ', ', customer.first_name) 
  AS customer, address.phone, film.title FROM rental
INNER JOIN customer ON rental.customer_id = customer.customer_id
INNER JOIN address ON customer.address_id = address.address_id
INNER JOIN inventory ON rental.inventory_id = inventory.inventory_id
INNER JOIN film ON inventory.film_id = film.film_id
WHERE rental.return_date IS NULL
AND rental_date + INTERVAL film.rental_duration DAY < CURRENT_DATE()
LIMIT 5;

图 7.7 可视化解释示例

Content is described in the surrounding text.

下一个可视化解释图显示了包含哈希连接的查询的可视化表示。在 MySQL Workbench 8.0.22 之前,对于由 MySQL 8.0.19(或更早版本)执行的查询,哈希连接由 块嵌套循环 菱形表示。

SELECT first_name, last_name
FROM actor
FULL JOIN film_actor
WHERE '' = film_actor.actor_id;

图 7.8 带有哈希连接的可视化解释示例

Content is described in the surrounding text.

图形约定

  • 标准方框:表

  • 圆角方框:操作,例如 GROUP 和 SORT

  • 带框方框:子查询

  • 菱形:连接

文本和信息约定

  • 方框下方的标准文本:表(或别名)名称

  • 方框下方的粗体文本:使用的键/索引

  • 方框右上角的数字:过滤后从表中使用的行数

  • 方框左上角的数字:访问该表的相对成本(需要 MySQL 5.7 或更高版本)

  • 嵌套循环(或哈希连接)菱形右边的数字:连接产生的行数

  • 菱形上方的数字:连接的相对成本(需要 MySQL 5.7 或更高版本)

下表显示了可视化解释图中使用的关联颜色和描述。有关成本估算的更多信息,请参阅 优化器成本模型

表 7.1 可视化解释图信息

系统名称 颜色 可视化图表上的文本 工具提示相关信息
系统 蓝色 单行:系统常量 非常低的成本
CONST 蓝色 单行:常量 非常低的成本
EQ_REF 绿色 唯一键查找 低成本 - 优化器能够找到可用于检索所需记录的索引。它很快,因为索引搜索直接指向包含所有行数据的页面
REF 绿色 非唯一键查找 低-中等 - 如果匹配行的数量很少,则为低;随着行数的增加,成本会更高
FULLTEXT 黄色 全文索引搜索 专门的全文搜索。低 - 针对此专门的搜索需求
REF_OR_NULL 绿色 键查找 + 获取 NULL 值 低-中等 - 如果匹配行的数量很少,则为低;随着行数的增加,成本会更高
INDEX_MERGE 绿色 索引合并 中等 - 在查询中寻找更好的索引选择以提高性能
UNIQUE_SUBQUERY 橙色 对子查询表进行唯一键查找 低 - 用于高效的子查询处理
INDEX_SUBQUERY 橙色 对子查询表进行非唯一键查找 低 - 用于高效的子查询处理
RANGE 橙色 索引范围扫描 中等 - 部分索引扫描
INDEX 红色 全文索引扫描 高 - 尤其是对于大型索引
ALL 红色 全表扫描 非常高 - 对于大型表而言非常昂贵,但对于小型表的影响较小。没有为该表找到可用的索引,这迫使优化器搜索每一行。这可能还意味着搜索范围过于广泛,索引将无用。
UNKNOWN 黑色 未知 注意:这是默认值,如果无法确定匹配项