Amazon Redshift クエリプランの EXPLAIN 演算子 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Redshift クエリプランの EXPLAIN 演算子

このセクションでは、EXPLAIN出力で最も頻繁に表示される演算子を簡単に説明します。

シーケンシャルスキャン

Sequential Scan 演算子 (Seq Scan) は、テーブルスキャンを示します。Seq Scan は、テーブル内の各列を最初から最後まで順番にスキャンし、各行のクエリ制約を ( WHERE句で) 評価します。

Join 演算子

Amazon Redshift は、結合されるテーブルの物理的な設計、結合に必要なデータの場所、クエリ固有の要件に基づいて、結合演算子を選択します。

Nested Loop

ネストされたループは主にクロス結合に使用されます。クロス結合は、2 つのテーブルのデカルト積を算出する結合条件のない結合です。ネストされたループは通常、ネストされたループ結合として実行されます。これは、可能な結合タイプの中で最も遅いものです。ネストされたループが存在する場合、STL_ALERT_EVENT_LOG ビューにネストされたループアラートイベントが表示されます。次のクエリを実行して、ネストされたループを持つクエリを特定できます。

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;

ハッシュ結合とハッシュ

ハッシュ結合とハッシュ演算子は通常、ネストされたループ結合よりも高速です。これらの演算子は、内部結合と左右の外部結合に使用されます。結合列が分散キーとソートキーの両方ではないテーブルを結合するときに、ハッシュ結合演算子とハッシュ演算子を使用できます。ハッシュ演算子は、結合内の内部テーブルのハッシュテーブルを作成します。ハッシュ結合演算子は、外部テーブルを読み取り、結合列をハッシュし、内部ハッシュテーブルで一致を検索します。

マージ結合

マージ結合演算子は通常、最速の結合であり、内部結合と外部結合に使用されます。マージ結合はフル結合には使用されません。結合列がディストリビューションキーとソートキーの両方であるテーブルを結合する場合、および結合テーブルの 20% 未満がソートされていない場合、マージ結合を使用できます。マージ結合演算子は、ソートされた 2 つのテーブルを順番に読み取り、一致する行を見つけます。未ソート行の割合を表示するには、SVV_TABLE_INFO システムテーブルをクエリします。

Aggregate 演算子

クエリプランは、集計関数とGROUP BYオペレーションを含むクエリで次の演算子を使用します。

  • AggregateAVGや などのスカラー集計関数の演算子 SUM

  • HashAggregate – 未ソートのグループ化された集計関数の演算子

  • GroupAggregate – ソートされたグループ化された集計関数の演算子

ソート演算子

クエリが結果セットをソートまたはマージする必要がある場合、クエリプランは次の演算子を使用します。

  • ソートORDER BY句と、UNIONクエリ、結合、SELECT DISTINCTクエリ、ウィンドウ関数に必要なソートなどの他のソートオペレーションを評価します。

  • マージ — 並列オペレーションから派生した中間ソート結果に従って、最終的なソート結果を生成します。

UNION、INTERSECT、および EXCEPT 演算子

クエリプランは、、UNIONINTERSECTおよび での設定オペレーションを含むクエリに次の演算子を使用しますEXCEPT

  • サブクエリUNIONクエリの実行に使用されます

  • Hash Intersect DistinctINTERSECTクエリの実行に使用されます。

  • SetOp 例外EXCEPT (または MINUS) クエリの実行に使用されます

その他の演算子

次の演算子は、ルーチンクエリのEXPLAIN出力にも頻繁に表示されます。

  • 一意SELECT DISTINCTクエリとUNIONクエリの重複を削除します

  • 制限LIMIT句を処理します。

  • Window – ウィンドウ関数を実行します。

  • 結果 — テーブルアクセスを含まないスカラー関数を実行します。

  • サブプラン — 特定のサブクエリに使用されます

  • ネットワーク — 中間結果をリーダーノードに送信してさらに処理します

  • テリアライズ – ネストされたループ結合と一部のマージ結合への入力行を保存します