怎么阅读MySQL Optimizer Trace

Optimizer Trace作为MySQL 5.6的一个性能优化的改进,对我们诊断sql的执行计划问题有很好的帮助,但是这个trace不是那么容易搞懂。
下面是我最近整理的一个ppt的内容和最后总结,完整内容可以查看这个:http://vdisk.weibo.com/s/yVPqSkuZS6ILO?from=page_100505_profile&wvr=6

介绍内容:

单表选择率
索引选择率
RBO与CBO
CBO
CBO基础
Cost Estimates
Input to Cost Model
统计信息
推荐阅读
Optimizer Trace
OPTIMIZER_TRACE的过程
join_preparation
join_optimization
代价估算实例
总结

总结:
Trace信息是非常复杂的:
如果你读过源码,精通算法,比较容易读懂
很多地方有cost微调
不懂源码,可以先了解其思想,执行计划得出的大概过程。然后逐步看trace里的cost,反推计算方式,核实对应的统计信息是否正确

统计信息是非常重要的:
是CBO的基础
错误的统计信息会导致执行计划不准
执行计划错误的时候一般先检查统计信息

尽量写简单的sql:
N个表最多的连接顺序为N!
关联表太多得到的执行计划只是部分最优的

Cost Based Oracle Fundamentals:
Oracle 的CBO思想,对了解MySQL的CBO有很大的借鉴意义