PostgreSQL手册之查询规划
基因查询优化器
geqo (boolean)
允许或禁止基因查询优化,这是一种试图不通过穷举搜索来实现查询规划的算法。缺省是允许。 geqo_threshold 变量提供了一种为特定类别的查询关闭 GEQO 的粒度更好的方法。
geqo_threshold (integer)
只有当涉及的FROM关系数量至少有这么多个的时候,才使用基因查询优化。 (请注意一个外JOIN构造只算做一个FROM项。) 缺省是 12,对于数量小于此数的查询,也许使用判定性的穷举搜索更有效。 但是对于有许多表的查询,规划器做判断要花很多时间。
geqo_effort (integer)
控制 GEQO 里规划时间和查询规划的有效性之间的平衡。 这个变量必须事一个范围从 1 到 10 的整数。缺省值是 5。 大的数值增加花在进行查询规划上面的时间,但是也很可能会提高选中更有效的查询规划的几率。
geqo_effort 实际上并没有直接干什么事情; 只是用于计算其它那些影响 GEQO 行为的变量的缺省值(在下面描述)。 如果你愿意,你可以手工设置其它参数。
geqo_pool_size (integer)
控制 GEQ0 使用的池大小。池大小是一个全体中的个体的数量。 它必须至少是二,并且有用的数值通常在 100 和 1000 之间。 如果把它设置为零(缺省设置),那么就会基于 geqo_effort 和查询中表的数量选取一个合适的缺省。
geqo_generations (integer)
控制 GEQO 使用的子代的数目。子代声明算法的迭代的数目。 它必须至少是一,有用的值范围和池的大小相同。如果设置为零(缺省),那么将基于 geqo_pool_size 选取合适的缺省。
geqo_selection_bias (floating point)
控制 GEQO 使用的选择性偏好。选择性偏好是在一个种群中的选择性压力。 数值可以是 1.5 到 2.0 之间;后者是缺省。
其它规划器选项
default_statistics_target (integer)
为没有用 ALTER TABLE SET STATISTICS 设置字段相关目标的表中其它字段设置缺省统计目标。 更大的数值增加了 ANALYZE 所需要的时间,但是可能会改善规划器的估计质量。缺省值是 10。 有关 PostgreSQL 的查询规划器使用的统计的更多信息,请参考 Section 13.2。
from_collapse_limit (integer)
如果生成的 FROM 列表不超过这个限制的项数,规划器将把子查询融合到上层查询。 小的数值降低规划的时间,但是可能会生成差些的查询计划。 缺省是 8。通常,把它限制在小于 geqo_threshold 的数值是比较明智的。
join_collapse_limit (integer)
如果得出的列表不超过这个数目的项,那么规划器将把明确的内 JOIN 构造抹平到 FROM 列表项中。 PostgreSQL 7.4 以前,通过 JOIN 构造声明的连接绝对不会被查询规划期重排。 现在的查询规划器已经改进过了,这样,用这种形式写出来的内层连接就可以重排了; 这个配置参数控制这种重排的程度。
注意: 目前,用 JOIN 构造声明的外联接的顺序从来不会查询规划器被调整; 因此,join_collapse_limit 在这个行为上没有效果。 在未来的 PostgreSQL 版本里,规划器可能会改进某些外联接类型的重排。
缺省时,这个值设置为和 from_collapse_limit 相同, 这个值适合大多数场合。把它设置为 1 则避免任何内 JOIN 的融合,就可以使用明确的 JOIN 语法来控制连接顺序。查询优化器并不是总能选取最优的联接顺序;高级用户可以选择暂时把这个变量设置为 1, 然后明确地声明他们需要的联接顺序。把这个变量设置为 1 的另外一个后果是查询规划器会表现得更像 PostgreSQL 7.3 查询规划器,可能对一些用户做向下兼容很有用。
把这个数值设置为 1 和 from_collapse_limit 之间可能对于在规划时间和选取的规划的质量之间有个平衡 (越高的数值生成越好的规划)。