Amazon Redshift 查詢計畫的 EXPLAIN 運算子 - AWS 方案指引

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

Amazon Redshift 查詢計畫的 EXPLAIN 運算子

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

循序掃描

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

聯結運算子

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

巢狀迴圈

巢狀迴圈主要用於跨聯結。交叉聯結是沒有聯結條件的聯結,會造成兩個資料表的笛卡兒乘積。巢狀迴圈通常會以巢狀迴圈聯結的形式執行,這是可能的聯結類型中最慢的。如果巢狀迴圈存在,您可以在 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% 的聯結資料表時。合併聯結運算子會依序讀取兩個排序的資料表,並尋找相符的資料列。若要檢視未排序資料列的百分比,請查詢 SVV_TABLE_INFO 系統資料表。

彙整運算子

查詢計畫會在涉及彙總函數和GROUP BY操作的查詢中使用下列運算子:

  • 彙總 – 純量彙總函數的運算子,例如 AVGSUM

  • HashAggregate – 未排序分組彙總函數的運算子

  • GroupAggregate – 排序分組彙總函數的運算子

排序運算子

當查詢必須排序或合併結果集時,查詢計畫會使用下列運算子:

  • 排序 – 評估ORDER BY子句和其他排序操作,例如UNION查詢和聯結、SELECT DISTINCT查詢和視窗函數所需的排序

  • 合併 – 根據衍生自平行操作的中繼排序結果產生最終排序結果

UNION、INTERSECT 和 EXCEPT 運算子

查詢計畫會將下列運算子用於涉及使用 UNIONINTERSECT和 設定操作的查詢EXCEPT

  • 子查詢 – 用來執行UNION查詢

  • Hash Intersect Distinct – 用來執行INTERSECT查詢

  • SetOp 除外 – 用於執行 EXCEPT(或 MINUS) 查詢

其他運算子

下列運算子也會經常出現在例行查詢的EXPLAIN輸出中:

  • 唯一 – 移除SELECT DISTINCT查詢和UNION查詢的重複項目

  • 限制 – 處理 LIMIT子句

  • 視窗 – 執行視窗函數

  • 結果 – 執行不涉及任何資料表存取的純量函數

  • 子計畫 – 用於特定子查詢

  • 網路 – 將中繼結果傳送至領導節點以進行進一步處理

  • 具體化 – 將輸入資料列儲存至巢狀迴圈聯結和一些合併聯結