MySQL之Optimizer_trace
发布日期:2016-4-15 15:4:36
MySQL之Optimizer_trace 一、前言 目前,使用explain只能查询MySQL的QEP,当MySQL选择了一个错误的执行计划后,我们都很想知道是什么导致了MySQL做了错误的决定,所以在这个时时optimizer_trace就华丽登场啦。 二、典型使用: 1.# timizer_trace默认是关闭的,开启 SET optimizer_trace="enabled=on"; 2.#让json的每个结束符号注释上相应的标记 SET END_MARKERS_IN_JSON=on; 3.#设置trace的最大长度,防止trace被截断 SET OPTIMIZER_TRACE_MAX_MEM_SIZE=1000000; 三、Optimizer Trace的分析 optimizer trace共分为join_preparation,join_optimization,join_execution三个阶段,其中join_optimization是核心。 下面我们来详细介绍join_optimization的过程:
SELECT ...; # 你的SQL语句 SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE; # 完成分析后关闭 SET optimizer_trace="enabled=off"; 四、结束语 以上为一个基本的trace结构,当你有子查询,执行过程中需要产生临时文件时,trace就要复杂得多,在MySQL5.6中,eq_range_index_dive_limit的默认值是10,当IN()后列举的值的个数超过eq_range_index_dive_limit时,采用索引统计信息,并不是分析索引来评估开销。 五、参考文档 以下是我的参考文档: http://dev.mysql.com/doc/internals/en/optimizer-tracing.html Posted in: MySQL practise 上一条: 我喜欢数据库的原因:没那么复杂和吓人
|