翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Redshift クエリプランの EXPLAIN 演算子
このセクションでは、EXPLAIN 出力で最もよく使用される演算子を簡単に示します。
Sequential Scan
Sequential Scan 演算子 (Seq Scan) は、テーブルスキャンを示します。Seq Scan によってテーブル内の各列を最初から最後まで連続的にスキャンし、各行のクエリ制約を (WHERE 句で) 評価します。
Join 演算子
Amazon Redshift は、結合されるテーブルの物理的な設計、結合に必要なデータの場所、クエリ固有の要件に基づいて、結合演算子を選択します。
Nested Loop
Nested Loop は、主にクロス結合に使用されます。クロス結合は、2 つのテーブルのデカルト積を算出する結合条件のない結合です。Nested Loop は通常、使用可能な結合タイプの中で最も遅いネストしたループ結合として実行されます。Nested Loop がある場合、STL_ALERT_EVENT_LOG ビューにネストしたループのアラートイベントが表示されることがあります。次のクエリを実行して、Nested Loop が含まれるクエリを特定できます。
select q.query, trim(q.querytxt) as sql_query, q.starttime from stl_query q join stl_alert_event_log l on l.query = q.query and l.event like 'Nested Loop Join in the query plan%' order by q.starttime desc;
Hash Join および Hash
Hash Join 演算子と Hash 演算子は通常、ネストしたループ結合よりも高速です。これらの演算子は、内部結合と左右の外部結合に使用されます。Hash join と Hash 演算子は、結合列が分散キーでもソートキーでもないテーブルを結合するときに使用されます。Hash 演算子で、結合の内部テーブルのハッシュテーブルが作成されます。Hash Join 演算子では、外部テーブルを読み取り、結合する列をハッシュ処理し、内部ハッシュテーブルで一致を検索します。
マージ結合
Merge Join 演算子は通常、最も高速な結合であり、内部結合と外部結合に使用されます。Merge Join は、完全結合には使用されません。この演算子は、結合列が分散キーとソートキーの両方である結合テーブルで、未ソートの結合テーブルが 20 % 未満の場合に使用できます。また、ソートされた 2 つのテーブルを順に読み取り、一致する行を検索します。ソートされていない行の割合を表示するには、SVV_TABLE_INFO システムテーブルをクエリします。
Aggregate 演算子
クエリプランは、集計関数および GROUP BY 操作を含むクエリで次の演算子を使用します。
-
Aggregate –
AVGやSUMといったスカラー集計関数の演算子 -
HashAggregate – 未ソートのグループ化された集計関数の演算子
-
GroupAggregate – ソート済みのグループ化された集計関数の演算子
ソート演算子
クエリプランは、クエリで結果セットをソートまたはマージする必要があるときに次の演算子を使用します。
-
Sort –
ORDER BY句およびその他のソート操作 (UNIONクエリや結合、SELECT DISTINCTクエリ、ウィンドウ関数で必要となるソートなど) を評価します。 -
Merge – 並列操作から導出される、ソートされた中間結果に従って最終的なソート結果を作成します。
UNION、INTERSECT、および EXCEPT 演算子
クエリプランは、UNION、INTERSECT、および EXCEPT を使用したセット操作を含むクエリに次の演算子を使用します。
-
Subquery –
UNIONクエリの実行に使用されます -
Hash Intersect Distinct –
INTERSECTクエリの実行に使用されます -
SetOp Except –
EXCEPT(またはMINUS) クエリの実行に使用されます
その他の演算子
次の演算子は、ルーチンクエリの EXPLAIN 出力にも頻繁に出現します。
-
Unique –
SELECT DISTINCTクエリとUNIONクエリの重複を排除します -
Limit –
LIMIT句を処理します -
Window – ウィンドウ関数を実行します
-
Result – テーブルへのアクセスを伴わないスカラー関数を実行します
-
Subplan – 特定のサブクエリに使用されます
-
Network – 詳細な処理を行うために中間結果をリーダーノードに送ります
-
Materialize – ネストしたループ結合と一部のマージ結合への入力用に、行を保存します