本頁說明 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 子運算式。 |
結構建構函式
這個運算子會為運算作業產生的資料列建立結構 (欄位集合)。
| 名稱 | 摘要 |
|---|---|
| 結構建構函式 | 這個運算子會為運算作業產生的資料列建立結構 (欄位集合)。 |