| ヒントタイプ | 説明 |
|---|---|
USE_HASH_AGGREGATION |
ハッシュ集計を強制的に使用します。その逆操作は NO_USE_HASH_AGGREGATION です。 |
NO_USE_HASH_AGGREGATION |
ハッシュ集計の使用を回避します。その逆操作は USE_HASH_AGGREGATION です。 |
GBY_PUSHDOWN |
2段階 GROUP BY プッシュダウンを使用するように設定します。その逆操作は NO_GBY_PUSHDOWN です。 |
NO_GBY_PUSHDOWN |
2段階 GROUP BY プッシュダウンを禁止するように設定します。その逆操作は GBY_PUSHDOWN です。 |
USE_HASH_AGGREGATION ヒント
USE_HASH_AGGREGATION ヒントは、オプティマイザーに対し、計画を生成する際にSQLステートメントを実行するために HASH 集約アルゴリズムを強制的に使用するよう指示します。GROUP BY/DISTINCT にHASH AGGREGATEを設定します。例えば、HASH GROUP BY、HASH DISTINCT などです。その逆の操作は NO_USE_HASH_AGGREGATION です。
構文
/*+USE_HASH_AGGREGATION([qb_name]) */
例
-- USE_HASH_AGGREGATIONヒントを使用して、クエリオプティマイザーにハッシュ集約アルゴリズムを使用して集約計算を実行するよう強制します。
-- このクエリでは、これはe.department_idでグループ化した給与の合計がハッシュテーブルを使用して計算されることを意味します。
SELECT /*+ USE_HASH_AGGREGATION */ e.department_id, sum(e.salary)
FROM employees e
WHERE e.department_id = 1001
GROUP BY e.department_id;
NO_USE_HASH_AGGREGATION ヒント
NO_USE_HASH_AGGREGATION ヒントは、オプティマイザーに対し、SQLステートメントを実行する際にハッシュ集約アルゴリズムを使用してそのステートメントを実行しないよう指示します。groupby/distinctにHASH AGGREGATEを使用せず、MERGE GROUP BY、MERGE DISTINCTを使用します。その逆の操作は USE_HASH_AGGREGATION です。
構文
/*+ NO_USE_HASH_AGGREGATION([qb_name]) */
例
-- NO_USE_HASH_AGGREGATIONヒントを使用して、クエリオプティマイザーにハッシュ集約アルゴリズムを使用しないよう指示します。
-- オプティマイザーは、ソート集約などの他の集約メソッドを選択して、e.department_idでグループ化した給与の合計を計算します。
SELECT /*+ NO_USE_HASH_AGGREGATION */ e.department_id, sum(e.salary)
FROM employees e
WHERE e.department_id = 1001
GROUP BY e.department_id;
GBY_PUSHDOWN ヒント
GBY_PUSHDOWN ヒントは、可能な場合にオプティマイザーに対し、GROUP BY 操作を分散データベース内の各データノードにダウンプッシュするよう指示します。これにより、各ノードは自身が保有するデータ部分についてまずグループ化と集約を行い、その後これらのローカル集約結果を中央ノードに送信して最終的な集約を完了させることができます。その逆の操作は NO_GBY_PUSHDOWN です。
構文
/*+ GBY_PUSHDOWN([qb_name]) */
例
SELECT /*+ GBY_PUSHDOWN */ department_id, COUNT(*) as emp_count
FROM employees
GROUP BY department_id;
NO_GBY_PUSHDOWN ヒント
NO_GBY_PUSHDOWN ヒントは、GBY_PUSHDOWN ヒントとは逆に、オプティマイザーに対し、GROUP BY 操作をデータノードにダウンプッシュせず、中央ノード上でグループ化と集約のプロセス全体を完了させるよう指示します。その逆の操作は GBY_PUSHDOWN です。
構文
/*+ NO_GBY_PUSHDOWN([qb_name]) */
例
SELECT /*+ NO_GBY_PUSHDOWN */ department_id, COUNT(*) as emp_count
FROM employees
GROUP BY department_id;