

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon Redshift 查詢計畫的 EXPLAIN 運算子
<a name="explain-operators"></a>

本節簡短說明您在`EXPLAIN`輸出中最常看到的運算子。

## 循序掃描
<a name="sequential-scan"></a>

循序掃描運算子 (Seq Scan) 指出資料表掃描。序列掃描會從頭到尾依序掃描資料表中的每個資料欄，並評估每一列的查詢限制 （在 `WHERE`子句中）。

## 聯結運算子
<a name="join-operators"></a>

Amazon Redshift 會根據要聯結資料表的實體設計、聯結所需的位置資料，以及查詢本身的特定需求來選取聯結運算子。

### 巢狀迴圈
<a name="join-nested-loop"></a>

巢狀迴圈主要用於跨聯結。交叉聯結是沒有聯結條件的聯結，會造成兩個資料表的笛卡兒乘積。巢狀迴圈通常會以巢狀迴圈聯結的形式執行，這是可能的聯結類型中最慢的。如果巢狀迴圈存在，您可以在 [STL\_ALERT\_EVENT\_LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ALERT_EVENT_LOG.html) 檢視中看到巢狀迴圈警示事件。您可以執行下列查詢，以識別具有巢狀迴圈的查詢：

```
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;
```

### 雜湊聯結和雜湊
<a name="join-hash"></a>

雜湊聯結和雜湊運算子通常比巢狀迴圈聯結更快。這些運算子用於內部聯結和左右外部聯結。您可以在聯結資料表時，使用雜湊聯結和雜湊運算子，其中聯結資料欄不是分佈索引鍵和排序索引鍵。雜湊運算子會為聯結中的內部資料表建立雜湊資料表。雜湊聯結運算子會讀取外部資料表、雜湊聯結欄，並在內部雜湊資料表中找到相符項目。

### 合併聯結
<a name="join-merge"></a>

合併聯結運算子通常是最快的聯結，用於內部聯結和外部聯結。合併聯結不會用於完整聯結。您可以在聯結資料表時，使用合併聯結，其中聯結資料欄同時是分佈索引鍵和排序索引鍵，以及未排序少於 20% 的聯結資料表時。合併聯結運算子會依序讀取兩個排序的資料表，並尋找相符的資料列。若要檢視未排序資料列的百分比，請查詢 [SVV\_TABLE\_INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html) 系統資料表。

## 彙整運算子
<a name="aggregate-operators"></a>

查詢計畫會在涉及彙總函數和`GROUP BY`操作的查詢中使用下列運算子：
+ **彙總** – 純量彙總函數的運算子，例如 `AVG`和 `SUM`
+ **HashAggregate** – 未排序分組彙總函數的運算子
+ **GroupAggregate** – 排序分組彙總函數的運算子

### 排序運算子
<a name="operators-sort"></a>

當查詢必須排序或合併結果集時，查詢計畫會使用下列運算子：
+ **排序** – 評估`ORDER BY`子句和其他排序操作，例如`UNION`查詢和聯結、`SELECT DISTINCT`查詢和視窗函數所需的排序
+ **合併** – 根據衍生自平行操作的中繼排序結果產生最終排序結果

### UNION、INTERSECT 和 EXCEPT 運算子
<a name="operators-union"></a>

查詢計畫會將下列運算子用於涉及使用 `UNION`、 `INTERSECT`和 設定操作的查詢`EXCEPT`：
+ **子查詢** – 用來執行`UNION`查詢
+ **Hash Intersect Distinct** – 用來執行`INTERSECT`查詢
+ **SetOp 除外** – 用於執行 `EXCEPT`（或 `MINUS`) 查詢

### 其他運算子
<a name="operators-other"></a>

下列運算子也會經常出現在例行查詢的`EXPLAIN`輸出中：
+ **唯一** – 移除`SELECT DISTINCT`查詢和`UNION`查詢的重複項目
+ **限制** – 處理 `LIMIT`子句
+ **視窗** – 執行視窗函數
+ **結果** – 執行不涉及任何資料表存取的純量函數
+ **子計畫** – 用於特定子查詢
+ **網路** – 將中繼結果傳送至領導節點以進行進一步處理
+ **具體化** – 將輸入資料列儲存至巢狀迴圈聯結和一些合併聯結