全部產品
Search
文件中心

PolarDB:OPT_PARAM Hints

更新時間:Jul 06, 2024

本文介紹PolarDB PostgreSQL版(相容Oracle)的OPT_PARAM Hint。

如果通過傳統的方式指定特定參數值,通常是在資料庫層級、會話層級或者使用者層級下進行的,無法精確控制執行特定SQL時使用的參數值。此時可以使用OPT_PARAM Hint實現在SQL層級指定特定參數值,將參數的修改範圍控制在SQL層級,指定的參數值僅在該SQL中有效。

文法

SELECT /*+ opt_param("enable_hashjoin" "off"),
opt_param("enable_mergejoin" "off") */ ...;

參數說明

當前OPT_PARAM Hint支援指定以下參數的值:
參數參數說明
enable_hashjoin允許或禁止查詢規劃器使用雜湊串連計劃類型。
enable_mergejoin允許或禁止查詢規劃器使用歸併串連計劃類型。
enable_nestloop允許或禁止查詢規劃器使用嵌套迴圈串連計劃。它不可能完全禁止嵌套迴圈串連,但是關閉這個變數將使得規劃器儘可能優先使用其他方法。
enable_bitmapscan允許或禁止查詢規劃器使用位元影像掃描計劃類型。
enable_indexonlyscan允許或禁止查詢規劃器僅用索引掃描計劃類型。
enable_indexscan允許或禁止查詢規劃器使用索引掃描計劃類型。
enable_material允許或禁止查詢規劃器使用物化。不可能完全抑制物化,但是關閉這個變數會阻止規劃器插入物化節點。
enable_seqscan允許或禁止查詢規劃器使用順序掃描計劃類型。它不可能完全禁止順序掃描,但是關閉這個變數將使得規劃器儘可能優先使用其他方法。
enable_sort允許或禁止查詢規劃器使用顯式排序步驟。它不可能完全禁止顯式排序,但是關閉這個變數將使得規劃器儘可能優先使用其他方法。
enable_tidscan允許或禁止規劃器使用TID掃描規劃類型。
enable_gathermerge允許或禁止查詢器使用收集歸併計劃類型。
enable_hashagg允許或禁用查詢規劃器使用雜湊聚集計劃類型。
enable_parallel_append允許或禁止查詢規劃器使用並行追加計劃類型。
enable_parallel_hash允許或禁止查詢規劃器對並行雜湊使用雜湊串連計劃類型。如果雜湊串連計劃沒有啟用,則此參數不生效。
enable_partition_pruning允許或禁止查詢規劃器從查詢計劃中消除一個分區表的分區。同時也控制著規劃器產生允許執行器在查詢執行期間移除(忽略)分區的查詢計劃的能力。
enable_partitionwise_aggregate允許或禁止查詢規劃器使用面向分區的分組或聚集,這使得在分區表上的分組或聚集可以在每個分區上分別執行。如果GROUP BY子句不包括分區鍵,只有部分聚集能夠以基於每個分區的方式執行,並且finalization必須最後執行。
enable_partitionwise_join允許或禁止查詢規劃器使用面向分區的串連,這使得分區表之間的串連以串連匹配分區的方式來執行。面向分區的串連當前只適用於串連條件包括所有分區鍵的情況,串連條件必須是相同的資料類型並且子分區集合需要1對1匹配。

樣本

不使用OPT_PARAM Hint:
EXPLAIN (COSTS OFF) SELECT * FROM sampletable WHERE x < 423;
使用OPT_PARAM Hint,將enable_bitmapscan參數設定為off,禁止查詢規劃器使用位元影像掃描計劃類型:
EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_bitmapscan" "off") */ * FROM sampletable WHERE x < 423;
使用OPT_PARAM Hint,將enable_mergejoin參數設定為off,禁止查詢規劃器使用歸併串連計劃類型:
EXPLAIN (COSTS OFF) SELECT /*+ opt_param("enable_mergejoin" "off") */ tt1.*, tt2.* FROM tt1 JOIN tt2 on tt1.joincol = tt2.joincol;
使用OPT_PARAM Hint,將enable_hashjoin參數設定為on,禁止查詢規劃器使用雜湊串連計劃類型:
EXPLAIN (COSTS OFF) SELECT/*+ opt_param("enable_hashjoin" "on") */ tt1.*, tt2.* FROM tt1 JOIN tt2 on tt1.joincol = tt2.joincol;