内容提要
MySQL 9.0引入了一个新功能,允许用户将EXPLAIN ANALYZE命令的输出保存为JSON文档。这个功能使用户能够跟踪查询性能并将数据用于历史分析和机器学习。通过从JSON文档中提取信息,用户可以存储和比较查询性能指标。但是,为了利用这个功能,用户需要将explain_json_format设置更改为2。文章还提供了使用JSON函数从JSON文档中提取数据并存储在表中的示例。作者建议进一步探索这个功能,但指出MySQL 9.0是一个创新版本,不应在生产环境中使用。
延伸解读
从估算到实测:EXPLAIN ANALYZE 的价值
文章指出,EXPLAIN 依赖历史统计信息,给出的执行计划是估算值,可能像不靠谱的承包商报价一样导致性能误判。而 EXPLAIN ANALYZE 会实际运行查询,提供精确的性能数据,如实际行数、实际耗时等。MySQL 9.0 允许将这些实测数据以 JSON 格式保存,为后续的性能对比和问题排查提供了可靠依据。
启用 JSON 输出格式的注意事项
要使用 EXPLAIN ANALYZE FORMAT=JSON INTO 变量 这一新语法,必须将 explain_json_format_version 设置为 2。默认情况下该变量为 NULL,如果未设置,MySQL 会明确提示需要更改。文章提醒,设置 1 和 2 之间存在细微差异,但只有设置 2 才能获得所需的 JSON 输出结构。
存储与提取性能指标的实践
文章演示了如何将 EXPLAIN ANALYZE 的输出保存到用户变量(如 @exp),然后使用 JSON 函数(如 JSON_EXTRACT)提取具体字段,例如 actual_rows 和 query。提取出的数据可以插入普通表中,便于长期存储和比较。作者还提到,查询语句可通过 MD5 哈希作为索引,但未深入展开。
创新版本的生产环境风险
文章明确警告,MySQL 9.0 是创新版本(Innovation Release),其生命周期短,功能可能不会进入未来的社区版。因此,不应在生产环境中使用 9.0。这一提醒对于希望尝试新功能的用户至关重要,建议仅在测试或实验环境中评估该特性。
Q&A
MySQL 9.0的新功能是什么?
MySQL 9.0引入了EXPLAIN ANALYZE命令的JSON输出功能,允许用户将查询性能数据保存为JSON文档。
如何使用EXPLAIN ANALYZE保存查询性能数据?
用户可以使用EXPLAIN ANALYZE FORMAT = JSON INTO语法将输出保存为JSON文档,需将explain_json_format设置更改为2。
EXPLAIN ANALYZE与传统EXPLAIN有什么区别?
EXPLAIN ANALYZE提供查询的实际性能数据,而传统的EXPLAIN仅提供估算信息。
如何从JSON文档中提取查询性能指标?
可以使用JSON函数提取数据,例如使用json_extract函数从保存的JSON文档中获取实际读取的行数。
MySQL 9.0适合在生产环境中使用吗?
不建议在生产环境中使用MySQL 9.0,因为它是一个创新版本,可能不稳定。
如何设置explain_json_format以使用新功能?
需要将explain_json_format设置更改为2,默认情况下该设置为NULL。