可视化解释功能使用扩展 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;
下一个可视化解释图显示了包含哈希连接的查询的可视化表示。在 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;
图形约定
标准方框:表
圆角方框:操作,例如 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 | 黑色 | 未知 | 注意:这是默认值,如果无法确定匹配项 |