将 SPL 例程与 PDQ 查询一起使用

在过程创建或使用 UPDATE STATISTICS 语句进行最后的手动重新编译时,数据库服务器将冻结用于优化 SPL 例程中 SQL 语句 的 PDQ 优先级。可以更改 PDQPRIORITY 的客户机值。

要更改 PDQPRIORITY 的客户机值,请将 SET PDQPRIORITY 语句嵌入您的 SPL 例程的主体中。

数据库服务器用来优化或重新优化 SQL 语句的 PDQ 优先级值是 SET PDQPRIORITY 语句设置的值,该语句必须已在相同的过程中执行。如果尚未执行这样的语句,将使用最后一次编译或创建过程时生效的优先级值。

当一个过程正在执行时,在该过程外部当前有效的 PDQ 优先级值将会在过程内被忽略。

建议您在输入一个过程时关闭 PDQ 优先级,然后为特定的语句将其再次打开。您可以避免该过程占用大量的内存,并且可以确保该过程的关键部件使用相应的 PDQ 优先级,如以下示例所示:
CREATE PROCEDURE my_proc (a INT, b INT, c INT)
      Returning INT, INT, INT;
SET PDQPRIORITY 0;
...
SET PDQPRIORITY 85;
SELECT ...(很大的复杂的 SELECT 语句)
SET PDQPRIORITY 0;
...
;