查詢執行運算子

本頁說明 Spanner 查詢執行計畫中使用的運算子。如要瞭解如何使用 Google Cloud 控制台擷取特定查詢的執行計畫,請參閱「瞭解 Spanner 如何執行查詢」。

執行計畫支援 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。

將 SQL 建構對應至查詢執行運算子

SQL 建構與查詢執行運算子之間的確切對應關係取決於查詢最佳化。下表列出一些常見的對應:

SQL 查詢執行運算子
資料表參照 資料表掃描、索引掃描
WHERE 篩選掃描篩選
GROUP BY 匯總
純量函式 (例如 ISNULL) 運算
匯總函式 (例如 SUM) 匯總
JOIN 任何聯結運算子;請參閱「聯結
子查詢 純量陣列子查詢
LIMIT 限制排序限制
ORDER BY 排序、排序限制

查詢執行運算子

本節列出所有查詢執行運算子,這些運算子可組成 Spanner 中的查詢執行計畫。

Leaf 運算子

沒有子項的運算子。

名稱 摘要
Array unnest 將輸入陣列整併到元素資料列中。
產生關係 傳回零或多個資料列。
單位關係 傳回一個資料列。
Empty relation 不會傳回任何資料列。
掃描 掃描資料列來源並傳回資料列。
篩選掃描結果 與掃描作業搭配使用,可減少從資料庫讀取的資料列數。

Unary 運算子

包含單一相關子項的運算子。

名稱 摘要
匯總 實作 GROUP BY SQL 陳述式和匯總函式。
套用變異 將資料操縱語言 (DML) 陳述式的變異套用到資料表。
建立批次 將輸入列分批,做成序列。
運算 藉由讀取輸入列,並新增一或多個透過純量陳述式運算的額外資料欄來產生輸出。
運算結構體 為結構建立變數,包含每個輸入資料欄的欄位。
DataBlockToRowAdapter 將以批次為導向的執行方法調整為以列為導向的執行方法。
篩選器 讀取輸入的所有資料列,在每一列上套用純量述詞,然後只傳回滿足述詞的資料列。
限制 限制傳回的資料列數。
Local split union 找出儲存在本機伺服器的資料表分割,對每個分割執行子查詢,然後建立聯集來合併所有結果。
隨機指派 ID 讀取輸入列並在每列中加入隨機數字,藉此產生輸出。
RowToDataBlockAdapter 將以列為導向的執行方法調整為以批次為導向的執行方法。
Serialize result 序列化查詢最終結果的每個資料列,以傳回用戶端。
排序 讀取輸入資料列,按照其一或多個資料欄加以排序,再傳回經過排序的結果。
資料表值函式 (TVF) 讀取輸入列並套用指定函式,藉此產生輸出。
聯集輸入 將結果傳回 union all 運算子。

Binary 運算子

包含兩個關聯子項的運算子。

名稱 摘要
申請加入 使用套用方法,將輸入端的每個資料列套用到對應端。
雜湊聯結 從標示為「建構」的輸入讀取資料列,並根據聯結條件插入雜湊表。
合併聯結 同時取用兩個輸入串流,並在符合聯結條件時輸出資料列。
遞迴聯集 執行兩項輸入的聯集,其中一項代表基本情況,另一項則代表遞迴情況。

N-ary 運算子

包含兩個以上關聯子項的運算子。

名稱 摘要
Union all 結合所有子項的資料列組合,且不會移除重複項目。

分散式運算子

跨多個伺服器執行的運算子。

名稱 摘要
Distributed union 在概念上將一或多個資料表分到多個分割,並在每個分割上個別遠端評估子查詢,然後聯集所有結果。
Distributed apply 跨多個伺服器執行,延伸套用聯結運算子。
Distributed merge union 以分散的形式將查詢傳送至多個遠端伺服器,然後再合併查詢結果,產生排序結果。
Push broadcast hash join 使用分散式雜湊聯結實作 SQL 聯結。

Scalar subquery

傳回單一純量值的 SQL 子運算式。

名稱 摘要
純量子查詢 傳回單一純量值的 SQL 子運算式。

Array subquery

傳回陣列的 SQL 子運算式。

名稱 摘要
陣列子查詢 傳回陣列的 SQL 子運算式。

結構建構函式

這個運算子會為運算作業產生的資料列建立結構 (欄位集合)。

名稱 摘要
結構建構函式 這個運算子會為運算作業產生的資料列建立結構 (欄位集合)。