MySQL 工作台  / 第 7 章性能工具  /  7.4 视觉解释计划

7.4 视觉解释计划

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

视觉解释用法

要查看直观的解释执行计划,请从 SQL 编辑器执行查询,然后在查询结果选项卡中选择执行计划。执行计划默认为Visual Explain,但它还包括一个Tabular Explain类似于您 EXPLAIN在 MySQL 客户端中执行时看到的视图。有关 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 可视化解释示例

内容在周围的文字中描述。

下一个可视化解释图显示了包含散列连接的查询的可视化表示。block nested loop在 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 带有散列连接的可视化解释示例

内容在周围的文字中描述。

图形约定

  • 标准盒子:桌子

  • 圆角框:GROUP、SORT等操作

  • 框架框:子查询

  • 钻石:加入

文本和信息约定

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

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

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

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

  • 嵌套循环(或散列连接)菱形右侧的数字:JOIN 生成的行数

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

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

表 7.1 视觉解释图信息

系统名称 颜色 可视化图表上的文字 工具提示相关信息
系统 蓝色的 单行:系统常量 成本极低
常量 蓝色的 单排:常量 成本极低
EQ_REF 绿色的 唯一键查找 低成本——优化器能够找到可用于检索所需记录的索引。它很快,因为索引搜索直接导致包含所有行数据的页面
参考文献 绿色的 非唯一键查找 Low-medium -- 如果匹配行数少则为Low;随着行数的增加而增加
全文 黄色 全文索引搜索 专门的全文搜索。低——对于这种专门的搜索要求
REF_OR_NULL 绿色的 键查找 + 获取 NULL 值 Low-medium -- 如果匹配的行数较少;随着行数的增加而增加
索引合并 绿色的 索引合并 Medium -- 在查询中寻找更好的索引选择以提高性能
UNIQUE_SUBQUERY 橙子 唯一键查找到子查询表 Low -- 用于高效的子查询处理
INDEX_SUBQUERY 橙子 非唯一键查找子查询表 Low -- 用于高效的子查询处理
范围 橙子 索引范围扫描 中——部分索引扫描
指数 红色的 全索引扫描 高——特别是对于大索引
全部 红色的 全表扫描 非常高——对大表来说成本很高,但对小表的影响较小。没有为该表找到可用的索引,这迫使优化器搜索每一行。这也可能意味着搜索范围太广,索引将毫无用处。
未知 黑色的 未知 注意:这是默认设置,以防无法确定匹配项