连接成本估算和索引选择
当查询优化器比较各种可能的访问选项时,它必须为每个候选者分配数字成本值。 优化器使用该值来确定耗用最少处理时间的实现。 此成本计算值是 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 = 1和B = 2选择表中 25% 的行。
辅助拨号的连接成本计算中的主要因素包括:
- 在所有先前的表中选择的行数
- 平均匹配从先前拨号中选择的每行的行数。
当连接运算符不是等号时,期望的匹配行数基于以下缺省过滤因子:
- 33% 用于小于等于,大于等于,小于等于或大于等于
- 90% 表示不等于
- BETWEEN 范围 (OPNQRYF %RANGE) 的 25%
- 每个 IN 列表值为 10% (OPNQRYF %VALUES)
例如,当连接运算符小于时,期望的匹配行数为 0.33 * (拨号中的行数)。 如果当前拨号没有活动的连接规范,那么假定笛卡尔乘积是运算符。 对于笛卡尔乘积,匹配行数是表盘中的每行,除非可以将本地行选择应用于索引。
当连接运算符相等时,期望的行数是给定值的平均重复行数。