

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

# Amazon Redshift クエリプランの EXPLAIN 演算子
<a name="explain-operators"></a>

このセクションでは、`EXPLAIN` 出力で最もよく使用される演算子を簡単に示します。

## Sequential Scan
<a name="sequential-scan"></a>

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

## Join 演算子
<a name="join-operators"></a>

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

### Nested Loop
<a name="join-nested-loop"></a>

Nested Loop は、主にクロス結合に使用されます。クロス結合は、2 つのテーブルのデカルト積を算出する結合条件のない結合です。Nested Loop は通常、使用可能な結合タイプの中で最も遅いネストしたループ結合として実行されます。Nested Loop がある場合、[STL\_ALERT\_EVENT\_LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ALERT_EVENT_LOG.html) ビューにネストしたループのアラートイベントが表示されることがあります。次のクエリを実行して、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
<a name="join-hash"></a>

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

### マージ結合
<a name="join-merge"></a>

Merge Join 演算子は通常、最も高速な結合であり、内部結合と外部結合に使用されます。Merge Join は、完全結合には使用されません。この演算子は、結合列が分散キーとソートキーの両方である結合テーブルで、未ソートの結合テーブルが 20 % 未満の場合に使用できます。また、ソートされた 2 つのテーブルを順に読み取り、一致する行を検索します。ソートされていない行の割合を表示するには、[SVV\_TABLE\_INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html) システムテーブルをクエリします。

## Aggregate 演算子
<a name="aggregate-operators"></a>

クエリプランは、集計関数および `GROUP BY` 操作を含むクエリで次の演算子を使用します。
+ **Aggregate** – `AVG` や `SUM` といったスカラー集計関数の演算子
+ **HashAggregate** – 未ソートのグループ化された集計関数の演算子
+ **GroupAggregate** – ソート済みのグループ化された集計関数の演算子

### ソート演算子
<a name="operators-sort"></a>

クエリプランは、クエリで結果セットをソートまたはマージする必要があるときに次の演算子を使用します。
+ **Sort** – `ORDER BY` 句およびその他のソート操作 (`UNION` クエリや結合、`SELECT DISTINCT` クエリ、ウィンドウ関数で必要となるソートなど) を評価します。
+ **Merge** – 並列操作から導出される、ソートされた中間結果に従って最終的なソート結果を作成します。

### UNION、INTERSECT、および EXCEPT 演算子
<a name="operators-union"></a>

クエリプランは、`UNION`、`INTERSECT`、および `EXCEPT` を使用したセット操作を含むクエリに次の演算子を使用します。
+ **Subquery** – `UNION` クエリの実行に使用されます
+ **Hash Intersect Distinct** – `INTERSECT` クエリの実行に使用されます
+ **SetOp Except** – `EXCEPT` (または `MINUS`) クエリの実行に使用されます

### その他の演算子
<a name="operators-other"></a>

次の演算子は、ルーチンクエリの `EXPLAIN` 出力にも頻繁に出現します。
+ **Unique** – `SELECT DISTINCT` クエリと `UNION` クエリの重複を排除します
+ **Limit** – `LIMIT` 句を処理します
+ **Window** – ウィンドウ関数を実行します
+ **Result** – テーブルへのアクセスを伴わないスカラー関数を実行します
+ **Subplan** – 特定のサブクエリに使用されます
+ **Network** – 詳細な処理を行うために中間結果をリーダーノードに送ります
+ **Materialize** – ネストしたループ結合と一部のマージ結合への入力用に、行を保存します