Hintタイプ |
説明 |
|---|---|
DECORRELATE |
クエリ内のlateralテーブルに対する非関連化クエリの書き換えを有効にします。その逆操作はNO_DECORRELATEです。 |
NO_DECORRELATE |
クエリ内のlateralテーブルに対する非関連化クエリの書き換えを無効にします。その逆操作は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 ヒントを使用して、lateralテーブルに対する非結合クエリの書き換えを無効にします。
-- `NO_MERGE` ヒントと `NO_DECORRELATE` を併用することで、オプティマイザーがサブクエリを外部クエリにマージしたり、非結合クエリの書き換えを行ったりしないようにします。
SELECT *
FROM t1, LATERAL (SELECT /*+ NO_MERGE NO_DECORRELATE */ *
FROM t2
WHERE t2.c2 = t1.c1) v
WHERE v.c1 = 1;