邏輯與實體運算子參考

運算子說明 SQL Server 如何執行查詢或資料操作語言 (DML) 陳述式。查詢最佳化工具會使用運算子來建立查詢計畫,以便建立查詢所指定的結果,或執行 DML 陳述式所指定的作業。查詢計畫是由實體運算子所組成的樹狀結構。

運算子可分為邏輯與實體運算子兩種。邏輯運算子說明概念層級的關聯式查詢處理作業。實體運算子則使用具體方法或演算法,實際實作邏輯運算子所定義的作業。例如,"join" 是邏輯作業,而 "nested loops joins" 則是實體運算子。

  • 邏輯運算子
    邏輯運算子說明用來處理陳述式的關聯式代數作業。換句話說,邏輯運算子可就概念上說明需要執行哪項作業。

  • 實體運算子
    實體運算子會實作邏輯運算子所描述的作業。每個實體運算子都是執行作業的物件或常式。例如,有些實體運算子會從資料表、索引或檢視中存取資料行或資料列。其他實體運算子則會執行其他類型的作業:彙總運算子會計算內含 MIN、MAX、SUM、COUNT 或 AVG 的運算式,而合併聯結運算子則會執行不同類型的邏輯聯結作業。

    實體運算子可進行初始化、收集資料及關閉。特別是,實體運算子可回應下列三種方法呼叫:

    • Init()Init() 方法會使實體運算子自行初始化,並設定任何必要的資料結構。實體運算子可接收許多 Init() 呼叫,但通常實體運算子只會接收一個。

    • GetNext()GetNext() 方法會使實體運算子取得資料的第一個或下一個資料列。實體運算子可能會接收零個或許多 GetNext() 呼叫。

    • Close()Close() 方法會使實體運算子執行某些清除作業並自行關閉。實體運算子只會接收一個 Close() 呼叫。

GetNext() 方法會傳回一列資料,而它被呼叫的次數會在使用 SET STATISTICS PROFILE ON or SET STATISTICS XML ON 所產生的「執行程序表」輸出中顯示為 ActualRows。如需有關這些 SET 選項的詳細資訊,請參閱<SET STATISTICS PROFILE (Transact-SQL)>和<SET STATISTICS XML (Transact-SQL)>。

「執行程序表」輸出中顯示的 ActualRebindsActualRewinds 計數代表 Init() 方法被呼叫的次數。除非運算子位於迴圈聯結的內部,否則 ActualRebinds 會等於 1,而 ActualRewinds 會等於零。如果運算子位於迴圈聯結的內部,重新繫結和倒轉數目的總和應該會等於聯結外部所處理的資料列數目。重新繫結是指聯結中有一或多個相互關聯的參數發生變更,而必須重新評估內部。倒轉是指相互關聯的參數沒有發生變更,先前的內部結果集可供重複使用。

ActualRebindsActualRewinds 會顯示在使用 SET STATISTICS XML ON 產生的「XML 執行程序表」輸出中。他們只會填入 「非叢集索引多工緩衝處理」「選端查詢」「資料列計數多工緩衝處理」「排序」「資料表多工緩衝處理」 以及 「資料表值函數」 運算子中。當 StartupExpression 屬性設為 TRUE 時,ActualRebindsActualRewinds 也會填入 「判斷」「篩選」 運算子。

「XML 執行程序表」中有 ActualRebindsActualRewinds 時,您可將它們與 EstimateRebindsEstimateRewinds 做比較。如果沒有,則可將估計的資料列數目 (EstimateRows) 和實際資料列數目 (ActualRows) 做比較。請注意,如果沒有實際重新繫結和實際倒轉,實際圖形「執行程序表」輸出便會顯示零。如需有關圖形「執行程序表」的詳細資訊,請參閱<顯示圖形執行計畫 (SQL Server Management Studio)>。

只有當「執行程序表」輸出是以 SET STATISTICS XML ON 產生時,才可使用相關的計數器 ActualEndOfScans。每當實體運算子存取至其資料流結尾時,此計數器就會累加 1。實體運算子可存取其資料流結尾零次、一次或多次。如同重新繫結和倒轉,只有當運算子位於迴圈聯結內部時,結尾掃描次數才能大於 1。結尾掃描次數應小於或等於重新繫結和倒轉的數目總和。

實體運算子會對應到執行演算法。實體運算子的範例包括 index scan/seek、nested loop join、merge join、hash join/aggregation、stream aggregation 等。實體運算子會有上述項目的相關成本。執行查詢或 DML 陳述式的每個步驟都與實體運算子有關。

對應實體與邏輯運算子

查詢最佳化工具會將查詢計畫建立為由邏輯運算子所組成的樹狀結構。在查詢最佳化工具建立計畫之後,它會為每個邏輯運算子選擇最有效率的實體運算子。查詢最佳化工具會使用以成本為基礎的方法,判斷哪個實體運算子將實作邏輯運算子。

一個邏輯運算子通常可由多個實體運算子實作。不過,在極少數的情況下,實體運算子也可以實作多個邏輯運算子。

本章節內容

本節包含下列邏輯與實體運算子的說明:

彙總

合併間隔

算術運算式

合併聯結

判斷提示

巢狀迴圈

指派

非叢集索引刪除

非同步串連

非叢集索引插入

點陣圖

非叢集索引掃描

點陣圖建立

非叢集索引搜尋

書籤查閱

非叢集索引多工緩衝處理

分支重新分割

非叢集索引更新

廣播

線上索引插入

快取

平行處理原則

刪除叢集索引

參數資料表掃描

叢集索引插入

部分彙總

叢集索引合併

母體擴展查詢

叢集索引掃描

重新整理查詢

叢集索引搜尋

遠端刪除

叢集索引更新

遠端索引掃描

摺疊

遠端索引搜尋

計算純量

遠端插入

串連

遠端查詢

固定掃描

遠端掃描

轉換

遠端更新

交叉聯結

重新分割資料流

資料指標雜物箱

結果

宣告

RID 查閱

刪除

右方反半聯結

刪除的掃描

右外部聯結

相異

右方半聯結

相異排序

資料列計數多工緩衝處理

散發資料流

區段

動態

區段重新分割

急切的多工緩衝處理

順序

提取查詢

SequenceProject

篩選

快照集

流程相異

排序

完整外部聯結

分割

蒐集資料流

多工緩衝處理

雜湊比對

資料流彙總

雜湊比對根

參數

雜湊比對小組

資料表刪除

If

資料表插入

內部聯結

資料表合併

插入

資料表掃描

插入的掃描

資料表多工緩衝處理

內建

資料表更新

Iterator 雜物箱

資料表值函數

索引鍵查閱

Top

索引鍵集

前 N 個排序

語言項目雜物箱

UDX

Lazy Spool

等位

左方反半聯結

更新

左外部聯結

While

左方半聯結

資料指標邏輯與實體運算子

記錄檔資料列掃描