天天看点

8.9 Controlling the Query Optimizer

8.9 Controlling the Query Optimizer

8.9.1 Controlling Query Plan Evaluation

8.9.2 Controlling Switchable Optimizations

8.9.3 Index Hints

MySQL 提供优化控制通过系统变量, 影响查询计划的评估,控制优化器和index hints.

8.9.1 Controlling Query Plan Evaluation 控制查询计划评估

查询优化器的任务是找出一个合适的执行计划来执行一个SQL查询,

因为好的执行计划和差的执行计划性能上是数量级的差别,

很多的查询计划, 包括了MySQL,包括或者或少的详见的搜索一个最优的方案在多有可能的查询评估方案中。

对于一个join 查询, 对于一个关联查询,对于小数据表(通常小于7到10)这不是一个问题。然而,当较大的查询被提交时,在查询优化所花费的时间可能会很容易成为在服务器的性能的主要瓶颈。

一个更加复杂的方法用于查询优化器启用用户来控制来搜索最佳的查询计划。

一般的方法是更少的时间花费在编译一个查询, 换句话说, 因为优化器跳过一些计划,

它可能会错过找到一个最优的计划。

optimizer_prune_level 变量告诉优化器来跳过某些计划基于被访问记录的评估。

我们的经验显示这种类型的有根据的猜测很少错误最优的执行计划,

并可能打打减少查询编译时间。这就是为什么默认是(optimizer_prune_level = 1),

然而,如果你确信优化器错过了一个更好的计划,这个选项可以被关掉(optimizer_prune_level=0)

这样编译查询可能需要花费很长的时间。