说明方式伪指令

使用说明方式伪指令来测试和调试查询计划并把关于查询计划的信息打印到说明输出文件。
说明方式伪指令
元素 描述 限制 语法
comments 用于记录伪指令的文本 必须出现在注释符号之间 字符串

下面的表列出了每一个说明方式伪指令的作用。

关键字
作用
EXPLAIN
对指定的查询启动 SET EXPLAIN ON
AVOID_EXECUTE
放置执行数据操作语句;代替为把查询计划打印到说明输出文件

EXPLAIN 伪指令主要用于测试和调试查询计划。在 SET EXPLAIN ON 已经有效的情况下,它是多余的。在视图定义或子查询中使用是不合法的。

下面的查询执行查询计划并把它打印到说明输出文件:
SELECT {+EXPLAIN}
          c.customer_num, c.lname, o.order_date
          FROM customer c, orders o WHERE c.customer_num = o.customer_num;

如果远程表是查询的一部分,AVOID_EXECUTE 伪指令防止在本地或远程位置执行查询。这个伪指令不会防止对查询中的不变函数求值。

下面的查询不返回数据,但把查询计划写到说明输出文件:
SELECT {+EXPLAIN, AVOID_EXECUTE}   c.customer_num, c.lname, o.order_date
          FROM customer c, orders o WHERE c.customer_num = o.customer_num;

不执行查询,必须同时使用 EXPLAIN 和 AVOID_EXECUTE 伪指令来查看优化程序的查询计划(在说明输出文件中)。用来分隔这两个伪指令的逗号(, )是可选的。

如果在指定 AVOID_EXECUTE 伪指令时省略 EXPLAIN 伪指令,不会报错,但是查询计划不会写到说明输出文件,并且不执行 DML 语句。

下列上下文中不能使用说明方式伪指令:
  • 在视图定义中
  • 在触发器中
  • 在子查询中

然而,在 INSERT 语句的 SELECT 语句中,它们是合法的。