验证指定的访问路径

Db2 无法始终使用您指定的访问路径。 当指定的访问路径无法使用时, Db2 会将指定的访问路径标记为无效。

开始特定程序编程接口信息。 如果您指定的访问路径存在问题, 会将整个查询块设为无效。 Db2 在这种情况下, Db2 将确定访问路径,就像没有指定访问路径一样。

Db2 在验证指定的访问路径时,仅使用下表中列出的PLAN_TABLE列。

表 1. PLAN_TABLE列, Db2 验证
专栏 公认的价值观或解释
QUERYNO、APPLNAME、PROGNAME、VERSION、COLLID、OPTHINT 必须分别与当前查询编号、应用程序名称、程序名称、版本ID、集合ID和当前优化提示特殊寄存器的值相匹配。
QBLOCKNO、PLANNO和MIXOPSEQ 必须提供PLAN_TABLE行
方法 必须为0、1、2、3或4。 任何其他值都会导致指定的访问路径无效。
创建者和别名 必须指定并命名表、物化视图、物化嵌套表表达式。 如果方法为3,则留空。 如果指定的表不存在或不在查询范围内,则指定的访问路径无效。
更改开始MATCHCOLS更改结束 更改开始仅当ACCESSTYPE为IN、N或HN时,才使用该值。 此值必须大于或等于 0。更改结束
TABNO 仅当以下列无法唯一标识特定表引用时,才需要此值:
  • CREATOR
  • TNAME
  • CORRELATION_NAME
  • QBLOCKNO
当多个视图引用同一张表且CORRELATION_NAME相同时,可能会出现这种情况。

当不需要时,此字段将被忽略。

ACCESSTYPE 表格的访问方法。 可接受的值列表请参见 PLAN_TABLE
包含以下值之一的每一行必须在其前面包含一行ACCESSTYPE='M',否则指定的访问路径无效:
  • DI
  • DU
  • MH
  • MI
  • MU
  • MX

任何一行包含ACCESSTYPE='A'的行都会使指定的访问路径无效。

访问创建者和访问名称 如果ACCESSTYPE为R或M,则忽略。如果ACCESSTYPE包含以下任何值,则这些字段必须标识指定表上的索引。
  • H
  • HN
  • I
  • I1
  • IN
  • N
  • NR

如果索引不存在,或者索引定义在不同的表上,则指定的访问路径无效。 此外,如果指定的索引无法使用,则指定的访问路径无效。

SORTN_JOIN和SORTC_JOIN 必须为Y、N或留空。 任何其他值都会导致指定的访问路径无效。

该值决定 Db2 是应该对新的(SORTN_JOIN)还是复合的(SORTC_JOIN)表进行排序。 如果指定的连接方法、连接顺序、访问类型和访问名称决定了是否需要新表或复合表,则忽略此值。

SORTC_ORDERBY和SORTC_GROUPBY 可接受值的列表请参见 PLAN_TABLE。 不考虑意外值。
PREFETCH 该值决定了 Db2 使用的预取类型。 可接受值的列表请参见 PLAN_TABLE

如果指定的访问类型和访问名称决定了所需的预取类型,则忽略此值。

COLUMN_FN_EVAL 可接受值的列表请参见 PLAN_TABLE。 不考虑意外值。
PAGE_RANGE 必须为Y、N或留空。 任何其他值都会导致指定的访问路径无效。
JOIN_TYPE 可接受值的列表请参见 PLAN_TABLE。 不考虑意外值。
PARALLELISM_MODE 仅当可以并行运行查询时,才会使用该值;也就是说,SET CURRENT DEGREE特殊寄存器包含ANY,或者计划或包与DEGREE(ANY)绑定。
如果平行性是可能的,则此列必须包含以下数值之一:
  • C
  • I
  • X
  • 空值
在使用访问路径提示时,所有与并行相关的限制仍然适用。 如果指定的模式无法执行,则指定的访问路径无效,或者模式被修改。 可能的结果是查询在没有并行的情况下运行。 空值表示无平行度。

如果计划表包含多个平行度规格, Db2 将仅使用第一个。 Db2 不会比较多个指定的访问路径以检查一致性。

ACCESS_DEGREE 或 JOIN_DEGREE 如果指定了 PARALLELISM_MODE,请使用此字段指定并行度。 如果您指定了平行度,则该数值必须大于零, Db2 可能会根据您在此处设置的数值调整平行度。空值表示无平行度如果您希望 Db2 来确定程度,请不要在此字段中输入数值。

如果您为ACCESS_DEGREE或JOIN_DEGREE指定了值,则必须同时指定相应的ACCESS_PGROUP_ID和JOIN_PGROUP_ID。

如果 Db2 使用并行度提示,而不是IN-list并行度提示,或者如果 degree=0 使用提示,则 Db2 无条件使用提示的并行度,而与PARAMDEG子系统参数的值无关。 因此,请确保提示中指出的平行度是合理的。

SORTN_PGROUP_ID和SORTC_PGROUP_ID 必须是正数或零。 空值表示对应表没有并行排序。
WHEN_OPTIMIZE 必须为R、B或空格。 任何其他值都会导致指定的访问路径无效。

当与 REOPT(ALWAYS) 绑定在一起的规划中的语句在运行时符合重新优化的条件,并且您为该语句提供了优化提示时,WHEN_OPTIMIZE 的值将决定 Db2 是否在运行时重新优化该语句。 如果 WHEN_OPTIMIZE 的值为空或 B,则 Db2 仅使用绑定时优化提示提供的访问路径。 如果WHEN_OPTIMIZE的值为R,则 Db2 会在绑定时使用指定的访问路径来确定访问路径。 运行时, Db2 会再次在PLAN_TABLE中搜索提示,如果语句的指定访问路径仍在PLAN_TABLE中且仍然有效, Db2 会再次优化访问路径。

QBLOCK_TYPE 必须指定一个值。 QBLOCK_TYPE列中的空白会使指定的访问路径无效。
PRIMARY_ACCESSTYPE 必须为D、T或空格。 任何其他值都会使指定的访问路径无效。
MERGC 只能是Y或N。
EXPANSION_REASON Db2 仅将此列用于引用存档或临时表且包含多个计划的语句。

结束特定程序编程接口信息。