通过创建包括查询优化器伪指令的关联记录并将这些记录保存在 sysdirectives 系统目录表中,可以定义外部伪指令。关联记录将一个或多个优化器伪指令的列表与特定查询文本相关联。数据库服务器可将这些优化器伪指令应用于相同查询文本的后续实例。
使用 SAVE EXTERNAL DIRECTIVES 语句来创建要用于一个或多个查询伪指令的列表的关联记录。这些伪指令将自动应用到相同查询的后续实例。
以下示例显示了 SAVE EXTERNAL TABLE 语句,该语句将系统目录中的关联记录注册为 sysdirectives 表中的新行,可将其用作查询优化器伪指令。
SAVE EXTERNAL DIRECTIVES {+INDEX(t1,i11)} ACTIVE FOR SELECT {+INDEX(t1, i2) } c1 FROM t1 WHERE c1=1;以下数据存储在上述 SQL 语句定义的关联记录中:
id 16 query select {+INDEX(t1, i2) } c1 from t1 where c1=1 directive INDEX(t1,i11) directivecode BYTE value
active 1 hashcode -589336273
此处,DIRECTIVES 关键字后面的外部伪指令 {+INDEX(t1,i11)} 将应用于指定查询的未来实例,但会忽略直接插入的 {+INDEX(t1,i2)} 伪指令。
紧接在 DIRECTIVES 关键字后面的外部伪指令中的信息必须位于注释指示符中,就如同相同的伪指令会出现在 SELECT、UPDATE、MERGE 和 DELETE 语句中一样,只是如果外部伪指令的列表包括多个伪指令,空白字符(而非逗号 (,))是必需的分隔符。