连接成本估算和索引选择

当查询优化器比较各种可能的访问选项时,它必须为每个候选者分配数字成本值。 优化器使用该值来确定耗用最少处理时间的实现。 此成本计算值是 CPU 和 I/O 时间的组合

连接顺序优化中的步骤 3 和 5 中,优化器估算成本并选择给定拨号组合的访问方法。 所做的选项类似于行选择的选项,只是必须选择使用探测器的计划。

成本计算值基于以下假设:
  • 必须从辅助存储器检索表页和索引页。 例如,查询优化器不知道整个表可能作为 Set Object Access (SETOBJACC) CL 命令的结果装入到活动内存中。 使用此命令可显着提高查询的性能。 但是,优化器不会更改查询实现以利用表的内存驻留状态。
  • 查询是在系统上运行的唯一进程。 对于由于使用相同资源的其他进程而发生的系统 CPU 利用率或 I/O 等待,不会给予任何允许。 与 CPU 相关的成本将按运行查询的系统的相对处理速度进行缩放。
  • 列中的值在表中均匀分布。 例如,如果表格中有 10% 的行具有相同的值,那么平均而言,表格中的每 10 行都包含该值。
  • 列值独立于行中的任何其他列值,除非存在键定义为 (A , B) 的可用索引。 多键字段索引允许优化器检测列之间的值何时相关。

    例如,名为 A 的列在表中 50% 的行中具有值 1 。 名为 B 的列在 50% 的行中具有值 2 。 期望查询选择行,其中 A = 1B = 2 选择表中 25% 的行。

辅助拨号的连接成本计算中的主要因素包括:
  • 在所有先前的表中选择的行数
  • 平均匹配从先前拨号中选择的每行的行数。
可以通过估算给定拨号的匹配行数来派生这两个因子。
当连接运算符不是等号时,期望的匹配行数基于以下缺省过滤因子:
  • 33% 用于小于等于,大于等于,小于等于或大于等于
  • 90% 表示不等于
  • BETWEEN 范围 (OPNQRYF %RANGE) 的 25%
  • 每个 IN 列表值为 10% (OPNQRYF %VALUES)

例如,当连接运算符小于时,期望的匹配行数为 0.33 * (拨号中的行数)。 如果当前拨号没有活动的连接规范,那么假定笛卡尔乘积是运算符。 对于笛卡尔乘积,匹配行数是表盘中的每行,除非可以将本地行选择应用于索引。

当连接运算符相等时,期望的行数是给定值的平均重复行数。