Mysql trace分析SQL优化器

Mysql trace分析SQL优化器,第1张

explain 可以查看 SQL 执行计划,但是无法知道它为什么做这个决策,如果想确定多种索引方案之间是如何选择的或者排序时选择的是哪种排序模式。从 MySQL 5.6 开始,可以使用 trace 查看优化器如何选择执行计划。通过trace,能够进一步了解为什么优化器选择A执行计划而不是选择B执行计划,或者知道某个排序使用的排序模式,帮助我们更好地理解优化器行为。

分析trace中的执行计划。可以有效分析建的索引为什么没有走。查看优化器如何选择执行计划,获取每个可能的索引选择的代价。

TRACE 字段中整个文本大致分为三个过程。

准备阶段:对应文本中的 join_preparation

优化阶段:对应文本中的 join_optimization

执行阶段:对应文本中的 join_execution

使用时,重点关注优化阶段和执行阶段。

索引字段会作用在查询和排序时,有排序字段时考虑跟查询一块建立组合索引

在MsSQL Server中我们要追踪SQL,只需要开启MS SQL中的事件追踪器(SQL Server Profiler)就可以了,而且设置非常的方便。但在MySQL中要实现类似功能需要做些处理,而且 *** 作也比较繁琐 —— 鼠标党,被MS毁了。

要启用MySQL的Sql Trace,需要启用查询日志功能,各个版本 *** 作不一,下面简要说明:

在MySql5.1.12之前

在my.cnf或者my.ini中的[mysqld]节下配置:

log = /path/for/file/live-query.log

而这些所有的参数都是可以在线设置的,也就是说,如果你不想因为修改设置而重启MySql的话,那么在线设置应该是个更好的选择,在进入MySql的 *** 作中:

--这里按照最新版本来设置

--查询关于log的设置

SHOW VARIABLES LIKE 'general_log%'

返回结果类似:

+------------------+------------------------------------------------------------

------------------+

| Variable_name    | Value

                  |

+------------------+------------------------------------------------------------

------------------+

| general_log      | OFF

                  |

| general_log_file | dev-mc.log

                  |

+------------------+------------------------------------------------------------

------------------+

2 rows in set (0.00 sec)

 

注意,general_log_file 的默认值是'机器名'.log

*/

-- 开启日志

SET GLOBAL general_log ='ON'

-- 设置日志的文件路径:本例在Windows下

SET GLOBAL general_log_file='D:/MySql/live-query.log'

-- 设置完之后,就已经生效了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7430442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存