このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) のOPT_PARAMヒントについて説明します。
特定のパラメーターの値は、データベースレベル、セッションレベル、またはユーザーレベルで指定できます。 この方法は伝統的です。 SQL文を実行する場合、その文の特定のパラメーターの値を制御することはできません。 この場合、OPT_PARAMヒントを使用して、SQL文の特定のパラメーターの値を指定できます。 このような値はSQL文でのみ有効です。
構文
SELECT /* + opt_param("enable_hashjoin" "off") 、opt_param("enable_mergejoin" "off") */ ...;
パラメーター
OPT_PARAMヒントを使用すると、次のパラメーターの値を指定できます。
パラメーター | 説明 |
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句にパーティションキーが含まれていない場合、パーティションごとに実行できるのは部分的な集計のみであり、後でファイナライズを実行する必要があります。 |
enable_partitionwise_join | クエリプランナーがパーティションごとの結合を使用できるようにするかどうかを指定します。 現在、パーティションごとの結合は、結合条件にすべてのパーティションキーが含まれている場合にのみ適用されます。パーティションキーは、同じデータ型で、1対1の一致する子パーティションのセットである必要があります。 |
例:
OPT_PARAMヒントを使用しないでください:
EXPLAIN (コストオフ) SELECT * FROM sampletable WHERE x < 423;
OPT_PARAMヒントを使用し、enable_bitmapscanパラメーターをoffに設定して、ビットマップ-スキャンプランタイプを使用するようにクエリプランナーを無効にします。
EXPLAIN (コストオフ) SELECT /* + opt_param("enable_bitmapscan" "OFF") */ * FROM sampletable WHERE x < 423;
OPT_PARAMヒントを使用し、enable_mergejoinパラメーターをoffに設定して、クエリプランナーがmerge-joinプランタイプを使用することを無効にします。
説明 (コストオフ) SELECT /* + opt_param("enable_mergejoin" "OFF") */ tt1 * 、tt2 * FROM tt1 JOIN tt2 on tt1.joincol = tt2.joincol;
クエリプランナーがハッシュ結合プランタイプを使用できるようにするには、OPT_PARAMヒントを使用し、enable_hashjoinパラメーターをonに設定します。
説明 (コストオフ) SELECT/* + opt_param("enable_hashjoin" "on") */ tt1 * 、tt2 * FROM tt1 JOIN tt2 on tt1.joincol = tt2.joincol;