在 SAVE EXTERNAL DIRECTIVES 中跟在 FOR 关键字之后的 query 规范必须指定有效的 SELECT 语句的语法,如 SELECT 语句 中描述的那样。如果 query 文本还包括任何 inline 优化程序伪指令,则当将外部伪指令应用到该查询时,忽略该 inline 伪指令。
当启用外部伪指令且 sysdirectives 系统目录表不为空时,数据库服务器将每一查询与每个 ACTIVE 外部伪指令的 query 文本相比较,对于由 DBA 或用户 gbasedbt 执行的查询,与每个 TEST ONLY 外部伪指令相比较。如果已将外部伪指令应用于查询了,则从 SET EXPLAIN 语句的输出指示那个查询 "EXTERNAL DIRECTIVES IN EFFECT"。
外部伪指令的目的是提高那些与 query 字符串相匹配的查询的性能,但使用这些伪指令可潜在地降低其他查询的速度,如果查询优化程序必须将大量的活动的外部伪指令的 query 字符串与每个 SELECT 语句的文本相比较的话。为此, GBase 推荐 DBA 不允许 sysdirectives 表累计超过一定数量的 ACTIVE 行。(避免对其他查询产生无意的性能影响的另一方法是禁用此特性。)
如果多于一个 SET EXTERNAL DIRECTIVES 语句将活动的外部伪指令与同一查询相关联,则结果不可预料,因为优化程序使用其 query 字符串相匹配的查询的第一 sysdirectives 行。
要获取关于优化程序伪指令及其语法的信息,请参阅 优化程序伪指令 中的“优化程序伪指令”段。
要获取关于 sysdirectives 表和 IFX_EXTDIRECTIVES 环境变量的信息,请参阅 GBase 8s SQL 参考指南。