一文带你了解MySQL之optimizer trace神器的功效

如题所述

前言:对于MySQL 5.6及之前的版本,查询优化器就像一个黑盒子,只能通过EXPLAIN语句查看执行计划,无法了解决策过程。optimizer trace功能开启后,用户可以追踪优化器生成执行计划的过程,帮助理解决策逻辑。

optimizer trace功能的启用与关闭由系统变量optimizer_trace控制。默认关闭,通过将enabled值设为on开启功能。

在MySQL 5.6及之后版本中,optimizer trace功能允许查看优化过程的完整信息。查询优化过程存储在information_schema数据库下的OPTIMIZER_TRACE表中,表包含QUERY、TRACE、MISSING_BYTES_BEYOND_MAX_MEM_SIZE和INSUFFICIENT_PRIVILEGES四列。

使用optimizer trace的步骤包括:1)开启功能,2)输入查询语句,3)查看查询优化过程,4)重复步骤2和3查看其他语句,5)关闭功能。

面对复杂查询,优化器可能选择多个索引或全表扫描。使用optimizer trace功能可以深入了解优化器决策过程,例如选择特定索引的原因。

通过查询OPTIMIZER_TRACE表,可以查看优化器执行的三个主要阶段:准备阶段、优化阶段、执行阶段。优化器主要关注成本分析和执行方案比较,最终选择成本最低的执行计划。

使用optimizer trace功能有助于深入理解MySQL查询优化器的工作机制。对于不理解EXPLAIN语句展示的执行计划的用户,通过了解不同执行方案的成本,可以提高对优化器决策的理解。

结束学习,希望您能成为自己道路上的指南针。感谢阅读,若内容对您有帮助,请考虑点赞、评论或收藏,每一点支持都激励我继续分享知识。
温馨提示:内容为网友见解,仅供参考
无其他回答

一文带你了解MySQL之optimizer trace神器的功效
optimizer trace功能的启用与关闭由系统变量optimizer_trace控制。默认关闭,通过将enabled值设为on开启功能。在MySQL 5.6及之后版本中,optimizer trace功能允许查看优化过程的完整信息。查询优化过程存储在information_schema数据库下的OPTIMIZER_TRACE表中,表包含QUERY、TRACE、MISSING_BYTES_BEYOND_MAX_MEM_SIZ...

[MySQL 8.0] 通过 Optimizer Trace 概览查询优化
使用 optimizer trace 功能,首先打开当前 session 的 optimizer_trace,执行 SQL 后获取 trace 信息。Optimizer Trace 的工作原理是通过在关键代码路径中埋点,收集需要跟踪的信息,如通过 Opt_trace_object、Opt_trace_array 添加到 trace 结果的 json 对象中。Optimizer trace 结果展示了 SQL 在 MySQL ...

你真的了解MySQL的排序吗?全字段排序与rowid排序大揭秘
首先,让我们通过一张思维导图来直观地了解排序流程。当执行order by语句时,特别是涉及全字段排序,MySQL会先在city字段上创建索引,以减少全表扫描。"Using filesort"标签表明额外排序的必要,这时sort_buffer(排序缓冲)会派上用场。如果数据量小,内存足够,排序在内存中完成;否则,会用到磁盘临时文...

MySQL怎样处理排序⭐️如何优化需要排序的查询?
在内存不足时,排序会转为磁盘上的临时文件排序,归并排序算法会被用到。优化器的追踪信息(optimizer_trace)可以显示辅助排序文件的数量和sort_buffer大小。为减少磁盘交互,应优化索引设计,确保对排序字段的有效利用。总结来说,处理排序的关键在于优化索引和内存使用。通过合理的索引设计,可以避免或减少...

Mysql Server 层混杂信息字典表 | 全方位认识 information_schem...
跟踪功能默认关闭,通过设置 optimizer_trace 系统变量开启。每个会话仅跟踪自己的 SQL 语句执行,不显示其他会话的执行情况。每个会话仅记录最后一个被跟踪的 SQL 语句。该表为 InnoDB 引擎的临时表,信息包括:QUERY(被跟踪的 SQL 语句文本)、TRACE(JSON 格式的跟踪信息)等。再来看 PLUGINS 表,它...

技术分享 | 为什么 SELECT 查询选择全表扫描,而不走索引?
查询1,并未用到ct_index(create_time)索引:而查询2,则用到了ct_index(create_time)索引:这里使用optimizer trace工具,观察MySQL对SQL的优化处理过程:获得关于此SQL的详细优化器处理信息:通过逐行阅读,发现优化器在join_optimization(SQL优化阶段)部分的rows_estimation内容里:通过观察优化器的信息,...

MySQL information_schema 详解
OPTIMIZER_TRACE: 提供优化跟踪信息。PROFILING: 显示服务器执行语句的工作情况。这些表有助于优化查询性能。MySQL事物和锁相关表 INNODB_LOCKS: 显示当前获取的锁信息。INNODB_LOCK_WAITS: 显示系统锁等待的相关信息。INNODB_TRX: 提供所有正在执行事物的信息。这些表便于查询事物和锁状态。information_schema...

MySQL:排序(filesort)详细解析(8000字长文)
10. 使用OPTIMIZER_TRACE查看排序结果,理解排序过程和使用的内存。案例中,通过group by操作的排序,如果sort字段过大,会使用回表排序,导致临时文件占用巨大。总结排序过程包括了组织排序数据的方式、排序方法的选择、内存分配策略以及临时文件的管理。理解排序过程对优化查询性能和避免大文件临时文件至关重要...

对order by的理解
我们通过optimizer_trace,可以看到是否使用了rowid排序的: 全字段排序与rowid排序对比 一般情况下,对于InnoDB存储引擎,会优先使用全字段排序。可以发现 max_length_for_sort_data 参数设置为1024,这个数比较大的。一般情况下,排序字段不会超过这个值,也就是都会走全字段排序。 order by的一些优化思路 我们如何优化orde...

怎么让mysql一个表中某个字段的值随着另一个表改变
比如下面这些:请点击输入图片描述 请点击输入图片描述 本次实验中,我们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程暴露出来。MySQL 中类似的技术还有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。这些技术将 MySQL 的不同方向的信息暴露出来,方便大家理解其中机制。

相似回答
大家正在搜