| ヒントタイプ | 説明 |
|---|---|
DECORRELATE |
ラテラルテーブルに対する非結合クエリの書き換えを有効にします。その逆操作は NO_DECORRELATE です。 |
NO_DECORRELATE |
ラテラルテーブルに対する非結合クエリの書き換えを無効にします。その逆操作は DECORRELATE です。 |
DECORRELATE Hint
DECORRELATE Hintは、クエリ内のlateralテーブルに対する非依存化クエリ変換を有効にするために使用されます。非依存化とは、外部クエリに依存する相関サブクエリ(correlated subquery)を独立したクエリまたは非相関サブクエリに変換することです。
DECORRELATE Hintの逆操作はNO_DECORRELATE Hintであり、lateralテーブルに対する非依存化クエリ変換を無効にするために使用されます。
構文
/*+ DECORRELATE [ ( [ @ qb_name ] ) ] */
パラメータの説明
@qb_name:オプション。非依存化変換を適用するクエリブロック名を指定します。
例
以下のクエリ例では、DECORRELATE Hintを使用して、クエリ内のlateralテーブルに対する非依存化クエリ変換を有効にします。
-- `NO_MERGE` Hintと`DECORRELATE`を組み合わせて使用することで、サブクエリが外部クエリとマージされないようにし、オプティマイザーにサブクエリの非依存化を明示的に要求します。
SELECT *
FROM t1, LATERAL (SELECT /*+ NO_MERGE DECORRELATE */ *
FROM t2
WHERE t2.c2 = t1.c1) v
WHERE v.c1 = 1;
NO_DECORRELATE Hint
DECORRELATE Hintの逆操作であり、NO_DECORRELATE Hintは、lateralテーブルに対する非依存化クエリ変換を無効にするために使用されます。
構文
/*+ NO_DECORRELATE [ ( [ @ qb_name ] ) ] */
パラメータの説明
@qb_name:オプション。非依存化クエリ変換を禁止するクエリブロック名を指定します。
例
以下のクエリ例では、NO_DECORRELATE Hintを使用して、lateralテーブルの非依存化クエリ変換を無効にします。
-- `NO_MERGE` Hintと`NO_DECORRELATE`を一緒に使用することで、オプティマイザーがサブクエリを外部クエリにマージせず、同時に非依存化クエリ変換も行わないようにします。
SELECT *
FROM t1, LATERAL (SELECT /*+ NO_MERGE NO_DECORRELATE */ *
FROM t2
WHERE t2.c2 = t1.c1) v
WHERE v.c1 = 1;