8.9.1 控制查询计划评估

查询优化器的任务是找到执行 SQL 查询的最佳计划。因为“好的”计划和“不好的”计划之间的性能差异可能是几个数量级(即,数秒相对于数小时甚至数天),所以大多数查询优化器(包括 MySQL 的优化器)或多或少都进行了详尽的搜索以获得最佳选择所有可能的查询评估计划中的计划。对于联接查询,MySQL 优化器调查的可能计划的数量与查询中引用的 table 的数量成指数增长。对于少量 table(通常少于 7 到 10),这不是问题。但是,提交较大的查询时,花在查询优化上的时间可能很容易成为服务器性能的主要瓶颈。

一种更灵活的查询优化方法,使用户可以控制优化程序在搜索最佳查询评估计划时的详尽程度。通常的想法是,优化器调查的计划越少,则编译查询所花费的时间就越少。另一方面,由于优化器会跳过某些计划,因此可能会找不到最佳计划。

可以使用两个系统变量来控制优化器相对于评估的计划数量的行为:

首页