共用方式為


執行程序邏輯和實體運算子參考

運算子描述 SQL Server 如何執行查詢或資料操作語言 (DML) 陳述式。 查詢最佳化工具會使用運算子來建立查詢計畫,以便建立查詢所指定的結果,或執行 DML 陳述式所指定的作業。 查詢計畫是由實體運算子所組成的樹狀目錄。 您可使用 SET SHOWPLAN 陳述式、SQL Server Management Studio 中的圖形執行計畫選項,或 SQL Server Profiler Showplan 事件類別,檢視查詢計畫。

運算子可分為邏輯與實體運算子兩種。

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

實體運算子
實體運算子會實作邏輯運算子所描述的作業。 每個實體運算子都是執行作業的物件或常式。 例如,有些實體運算子會從資料表、索引或檢視表中存取資料行或資料列。 其他實體運算子則會執行其他操作,如計算、彙總、資料完整性檢查或聯結。 實體運算子會有上述項目的相關成本。

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

  • 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 會等於一,而 ActualRewinds 會等於零。 如果運算子位於迴圈聯結的內部,重新繫結和倒轉數目的總和應該會等於聯結外部所處理的資料列數目。 重新繫結是指聯結中有一或多個相互關聯的參數發生變更,而必須重新評估內部。 倒轉是指相互關聯的參數沒有發生變更,先前的內部結果集可供重複使用。

ActualRebindsActualRewinds 會顯示在使用 SET STATISTICS XML ON 產生的「XML 執行程序表」輸出中。 它們只會針對 非叢集索引多工緩衝處理、、 Remote Query資料列計數多任務緩衝處理、、 Sort資料表多工緩衝處理和 資料表值函式 運算子填入。 當StartupExpression屬性設定為 TRUE 時,也可以為 AssertFilter運算子填入ActualRebindsActualRewinds

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

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

對應實體與邏輯運算子

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

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

運算子描述

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

圖形執行計畫圖示 Showplan 運算子 描述
Aggregate Aggregate 運算子會計算包含 MIN、MAX、SUM、COUNT 或 AVG 的運算式。 Aggregate 運算子可以是邏輯運算子或實體運算子。
算術運算式運算子圖示 Arithmetic Expression Arithmetic Expression 運算子會從資料列中現有的值計算出新的值。 Arithmetic Expression不會在 SQL Server 2014 中使用。
判斷提示運算子圖示 Assert Assert 運算子會驗證條件。 例如,它會驗證參考完整性,或確定純量子查詢傳回一個資料列。 針對每個輸入資料列, Assert 運算子會評估執行計畫資料行中的 Argument 運算式。 如果這個運算式評估為 NULL,代表資料列通過 Assert 運算子的驗證,則查詢會繼續執行。 如果這個運算式得出非 Null 值,就會得出相對的錯誤。 Assert 運算子是實體運算子。
指派語言項目圖示 Assign Assign 運算子會將運算式的值或常數指派給變數。 Assign 是語言元素。
Asnyc Concat Asnyc Concat 運算子只能使用於遠端查詢 (分散式查詢)。 它有 n 個子節點和一個父節點。 一般來說,某些子節點是參與分散式查詢的遠端電腦。 Asnyc Concat 會同時對所有子節點發出 open() 呼叫,然後再將點陣圖套用到每個子節點。 Async Concat 會針對每一個是 1 的位元,視需要將輸出資料列傳送至父節點。
點陣圖運算子圖示 Bitmap SQL Server會 Bitmap 使用 運算子,以平行查詢計劃實作點陣圖篩選。 點陣圖篩選會藉由排除索引鍵值的資料列,而無法產生任何聯結記錄的資料列,再透過另一個運算子傳遞資料列,例如 Parallelism 運算子,來加速查詢執行。 點陣圖篩選會於運算子樹狀目錄的一部分,以精簡方式顯示資料表中的一組值,以便從此樹狀目錄的另一個部分篩選第二個資料表中的資料列。 藉由盡早移除查詢中的不必要資料列,後續的運算子需要處理的資料列就會更少,而查詢的整體效能也會提升。 最佳化工具會判斷點陣圖何時具有足夠的選擇性能夠充分運用以及將篩選套用到哪個運算子。 Bitmap 是實體運算子。
點陣圖運算子圖示 Bitmap Create Bitmap Create 運算子會出現在建立點陣圖的 Showplan 輸出中。 Bitmap Create 是邏輯運算子。
書籤查閱運算子圖示 Bookmark Lookup Bookmark Lookup 運算子使用書籤 (資料列識別碼或叢集索引鍵) 在資料表或叢集索引中查閱對應的資料列。 資料 Argument 行包含用來查閱資料表或叢集索引中資料列的書簽標籤。 資料 Argument 行也包含查詢資料列的資料表或叢集索引名稱。 如果資料行中 Argument 出現 WITH PREFETCH 子句,查詢處理器判斷在查詢資料表或叢集索引中查閱書簽時,最好使用非同步預先擷取 (讀取) 。

Bookmark Lookup不會在 SQL Server 2014 中使用。 不過,Clustered Index SeekRID Lookup 會提供書籤查閱功能。 Key Lookup 運算子也提供這項功能。
Branch Repartition 在平行查詢計畫中,有時候會有 Iterator 的概念區。 在這種區域內的所有 Iterator,都可以由平行執行緒來執行。 區域本身必須連續執行。 個別區域內的一些 Parallelism Iterator,稱為 Branch Repartition。 在兩個這種區域的界限上的 Parallelism Iterator,稱為 Segment RepartitionBranch RepartitionSegment Repartition 是邏輯運算子。
Broadcast Broadcast 有一個子節點和 n 個父節點。 Broadcast 會依要求將其輸入資料列傳送至多位取用者。 每位取用者都會收到所有資料列。 例如,若所有取用者都是雜湊聯結的建立者,則會建立 n 份雜湊資料表。
建立雜湊運算子圖示 Build Hash 指示建立 xVelocity 記憶體最佳化的資料行存放區索引之批次雜湊資料表。
None Cache Cache多工緩衝 處理運算子的特殊版本。 它只儲存一列資料。 Cache 是邏輯運算子。 Cache不會在 SQL Server 2014 中使用。
叢集索引刪除運算子圖示 Clustered Index Delete Clustered Index Delete 運算子會從查詢執行計畫之 Argument 資料行所指定的叢集索引中刪除資料列。 如果 Argument 資料行中出現 WHERE:() 述詞,就只刪除滿足述詞的資料列。 Clustered Index Delete 是實體運算子。
叢集索引插入運算子圖示 Clustered Index Insert Clustered Index Insert 執行程序表運算子會將其輸入的資料列插入 Argument 資料行所指定的叢集索引中。 Argument 資料行也包含 SET:() 述詞,指出每一個資料行設定的值。 如果 Clustered Index Insert 插入值沒有子系,則插入的資料列會取自 Insert 運算子本身。 Clustered Index Insert 是實體運算子。
叢集索引合併運算子 叢集索引合併 「叢集索引合併」運算子會將合併資料流套用到叢集索引。 運算子會從運算子的資料行中指定的 Argument 叢集索引中刪除、更新或插入資料列。 實際執行的作業取決於運算子資料行中所 Argument 指定ACTION資料行的運行時間值。 「叢集索引合併」是實體運算子。
叢集索引掃描運算子圖示 Clustered Index Scan Clustered Index Scan 運算子會掃描查詢執行計畫的 Argument 資料行中指定的叢集索引。 出現選擇性的 WHERE:() 述詞時,只會傳回滿足述詞的資料列。 如果 Argument 資料行中包含 ORDERED 子句,表示查詢處理器要求資料列的輸出須按叢集索引的排序次序傳回。 如果沒有 ORDERED 子句,儲存引擎會以最佳方式搜尋索引,而不需要排序輸出。 Clustered Index Scan 是邏輯與實體運算子。
叢集索引搜尋運算子圖示 Clustered Index Seek Clustered Index Seek 運算子使用索引的搜尋能力,從叢集索引中擷取資料列。 資料 Argument 行包含所使用的叢集索引名稱,以及 SEEK: () 述詞。 儲存引擎會使用索引來處理滿足這個 SEEK:() 述詞的資料列。 也可以包含 WHERE:() 述詞,讓儲存引擎針對滿足 SEEK:() 述詞的所有資料列進行評估,但此為選擇性,且不使用索引來完成此程序。

如果資料 Argument 行包含 ORDERED 子句,查詢處理器已判斷資料列必須依照叢集索引排序的順序傳回。 如果沒有 ORDERED 子句,儲存引擎會以最佳方式搜尋索引,不需要將輸出排序。 讓輸出維持次序會比產生不按次序的輸出更沒效率。 出現關鍵字 LOOKUP 時,表示正在執行書籤查閱。 在 SQL Server 2008 和更新版本中, Key Lookup 運算子會提供書簽查閱功能。 Clustered Index Seek 是邏輯與實體運算子。
叢集索引更新運算子圖示 Clustered Index Update Clustered Index Update運算子會更新資料行中所指定叢集索引中的 Argument 輸入資料列。如果 WHERE: () 述詞存在,則只會更新滿足此述詞的資料列。 如果出現 SET:() 述詞,則每個更新的資料行都會設為這個值。 如果出現 DEFINE:() 述詞,就會列出這個運算子定義的數值。 在 SET 子句中或這個運算子中以及這個查詢中的其他位置,都可以參考這些數值。 Clustered Index Update 是邏輯與實體運算子。
摺疊運算子圖示 Collapse Collapse 運算子可最佳化更新處理。 執行更新時,它可以分割成 (使用 Split 運算子) 刪除與插入。 資料 Argument 行包含 GROUP BY: () 子句,指定索引鍵資料行的清單。 如果查詢處理器發現了刪除及插入相同索引鍵值的相鄰資料列,會以更有效率的單一更新作業來取代這些不同的作業。 Collapse 是邏輯與實體運算子。
資料行存放區索引掃描 Columnstore Index Scan 運算子 Columnstore Index Scan 會掃描查詢執行計畫之資料行中指定的 Argument 資料行存放區索引。
計算純量運算子圖示 Compute Scalar Compute Scalar運算子會評估運算式以產生計算純量值。 然後可能會將此值傳回給使用者,或由查詢的其他地方來參考,或兩者皆是。 例如在篩選述詞或聯結述詞中,就會見到這兩種情況。 Compute Scalar 是邏輯與實體運算子。

Compute Scalar 出現在 SET STATISTICS XML 所產生之 Showplans 中的運算子可能不會包含 RunTimeInformation 元素。 在圖形化的執行程序表中,選取 SQL Server Management Studio 中的 [包括實際執行計畫] 選項後,[屬性] 視窗可能不會顯示 [實際資料列]、[實際重新繫結] 與 [實際倒轉]。 發生此情況時,表示這些運算子雖然用於編譯的執行計畫中,它們的作用是由即時查詢計畫中的其他運算子執行。 同時也請注意,由 SET STATISTICS PROFILE 產生的「執行程序表」輸出中的執行數目,等於由 SET STATISTICS XML 產生的「執行程序表」中重新繫結和倒轉的總和。
串連運算子圖示 串連 「串連」運算子會掃描多個輸入,並傳回每一個掃描的資料列。 「串連」通常用於實作 Transact-SQL UNION ALL 建構。 「串連」實體運算子有兩個以上的輸入和一個輸出。 串連作業會將資料列從第一個輸入資料流複製到輸出資料流,再對其他每一個輸入資料流重複此作業。 「串連」是邏輯與實體運算子。
固定掃描運算子圖示 Constant Scan 運算子 Constant Scan 會在查詢中導入一或多個常數資料列。 Compute Scalar運算子通常會在 之後 Constant Scan 使用 ,將資料行加入運算子所產生的 Constant Scan 資料列。
轉換 (資料庫引擎) 語言項目圖示 Convert Convert 運算子可將某個純量資料類型轉換為另一個資料類型。 Convert 是語言元素。
Cross Join Cross Join 運算子會將第一個 (頂端) 輸入的每一列與第二個 (底部) 輸入的每一列相聯結。 Cross Join 是邏輯運算子。
資料指標 catchall 資料指標運算子圖示 catchall 產生圖形執行程序表的邏輯若找不到適當的 Iterator 圖示,就會顯示 [雜物箱] 圖示。 [雜物箱] 圖示不一定會指出錯誤條件。 [雜物箱] 圖示有三種:藍色 (迭代器)、橙色 (資料指標) 與綠色 (Transact-SQL 語言項目)。
None 資料指標 「資料指標」邏輯與實體運算子可用來說明與資料指標作業有關的查詢或更新將如何執行。 實體運算子是說明用來處理資料指標的實體實作演算法,例如使用索引鍵集衍生資料指標。 資料指標執行的每個步驟都有一個實體運算子。 邏輯運算子會說明資料指標的屬性,如資料指標是唯讀的。

邏輯運算子包括非同步、開放式、主要、唯讀、捲動鎖定及次要與同步。

實體運算子包括動態、提取查詢、索引鍵集、母體擴展查詢、重新整理查詢與快照集。
宣告語言項目圖示 Declare 運算子 Declare 會在查詢計劃中配置區域變數。 Declare 是語言元素。
刪除 (資料庫引擎) 運算子圖示 Delete Delete運算子會從滿足資料行中 Argument 選擇性述詞的物件資料列中刪除。
刪除掃描運算子圖示 Deleted Scan Deleted Scan 運算子會掃描觸發程序中已刪除的資料表。
Distinct Distinct 運算子可從資料列集或從值集合移除重複的項目。 Distinct 是邏輯運算子。
Distinct Sort Distinct Sort邏輯運算子會掃描輸入,移除重複專案,並依資料行的 DISTINCT ORDER BY: () 述詞 Argument 中指定的資料行排序。 Distinct Sort 是邏輯運算子。
散發資料流平行處理原則運算子圖示 散發資料流 「散發資料流」運算子只用於平行查詢計畫。 「散發資料流」運算子會採用記錄的單一輸入資料流,並產生多個輸出資料流。 記錄內容與格式不會變更。 輸入資料流中的每筆資料錄都會出現在一個輸出資料流中。 這個運算子會自動在輸出資料流中保留輸入資料錄的關聯次序。 通常是利用雜湊方式來決定特定輸入資料錄應屬於哪個輸出資料流。

如果輸出已分割,則資料 Argument 行會包含 PARTITION COLUMNS: () 述詞和資料分割資料行。 「散發資料流」是邏輯運算子。
動態資料指標運算子圖示 Dynamic Dynamic 運算子採用的資料指標,可以看到其他人進行的所有變更。
多工緩衝處理運算子圖示 急切的多工緩衝處理 積極式多工緩衝處理運算子會接受整個輸入,並將每個資料列儲存在儲存在資料庫中的 tempdb 隱藏暫存物件中。 例如,如果運算子 (重新復原,運算子 Nested Loops) 但不需要重新系結,則會使用多工緩衝處理的資料,而不是重新掃描輸入。 如果必須重新繫結的話,就丟棄多工緩衝處理的資料,然後重新掃描 (重新繫結) 輸入以重建多工緩衝處理物件。 「急切的多工緩衝處理」運算子會以「急切的」方式建立多工緩衝處理檔案:當多工緩衝處理的父系運算子要求第一列時,「多工緩衝處理」運算子會消耗其輸入運算子的所有資料列,並將它們儲存在多工緩衝處理中。 急切的多工緩衝處理 是邏輯運算子。
擷取查詢資料指標運算子圖示 Fetch Query Fetch Query 運算子會在對資料指標發出提取時擷取資料列。
篩選 (資料庫引擎) 運算子圖示 Filter Filter運算子會掃描輸入,只傳回滿足篩選運算式 (述詞) 出現在資料行中的資料 Argument 列。
Flow Distinct Flow Distinct 邏輯運算子會掃描輸入,移除重複的項目。 Distinct雖然運算子會在產生任何輸出之前取用所有輸入,但是FlowDistinct運算子會傳回每個資料列,因為該資料列是從輸入 (取得,除非該資料列重複,在此情況下會捨棄該資料列) 。
Full Outer Join Full Outer Join 邏輯運算子所傳回的每個資料列,皆滿足第一個 (上方) 輸入的聯結述詞與第二個 (下方) 輸入的每一個資料列相聯結。 它也會傳回以下資料列:

\- 第一個輸入中與第二個輸入完全不符合者。

\- 第二個輸入中與第一個輸入完全不符合者。



不包含相符值的輸入會以 Null 值傳回。 Full Outer Join 是邏輯運算子。
收集資料流平行處理原則運算子圖示 蒐集資料流 「蒐集資料流」運算子僅用於平行查詢計畫中。 「蒐集資料流」運算子會耗用數個輸入資料流,並將輸入資料流合併而產生記錄的單一輸出資料流。 記錄內容與格式不會變更。 若此運算子要保留順序,那麼所有輸入資料流都必須排序好。 如果輸出已排序,資料 Argument 行會包含 ORDER BY: () 述詞,以及要排序的資料行名稱。 蒐集資料流 是邏輯運算子。
雜湊比對運算子圖示 Hash Match Hash Match 運算子會根據其建立的輸入,為每一資料列計算雜湊值,以建立雜湊資料表。 HASH: () 述詞,其中包含用來建立雜湊值的資料行清單出現在資料行中 Argument 。 然後它會為每個探查列 (視情況) 建立雜湊值 (使用相同的雜湊函數),並在雜湊資料表中尋找符合者。 如果資料行) 中的 Argument RESIDUAL: () (存在殘差述詞,該述詞也必須滿足該述詞,才能將資料列視為相符專案。 行為取決於正在執行的邏輯作業:

對於任何聯結,使用第一個 (上方) 輸入來建立雜湊資料表,第二個輸入 (下方) 來探查雜湊資料表。 輸出相符 (或不符合) 由聯結類型規定。 如果多個聯結使用相同的聯結行,這些作業會組成一組成為雜湊群。

對於相異運算子或彙總運算子,使用輸入來建立雜湊資料表 (移除重複項,並計算任何彙總運算式)。 建立雜湊資料表時,會掃描資料表並輸出所有項目。

對於等位運算子,使用第一個輸入來建立雜湊資料表 (移除重複項)。 使用第二個輸入 (必須沒有重複項) 探查雜湊資料表,傳回不符合的所有資料列,然後掃描雜湊資料表,並傳回所有項目。



Hash Match 是實體運算子。
If 語言項目圖示 If If 運算子會依據運算式執行條件式處理。 If 是語言元素。
Inner Join Inner Join 邏輯運算子所傳回的每個資料列,皆滿足第一個 (上方) 輸入與第二個 (下方) 輸入的聯結。
插入 (資料庫引擎) 運算子圖示 Insert 邏輯 Insert 運算子會將每個資料列從其輸入插入資料行中指定的 Argument 物件。 實體運算子是 Table InsertIndex InsertClustered Index Insert 運算子。
插入的掃描運算子圖示 插入的掃描 「插入的掃描」運算子會掃描 inserted 資料表。 「插入的掃描」是邏輯與實體運算子。
內建語言項目圖示 Intrinsic 運算子 Intrinsic 會叫用內部 Transact-SQL 函式。 Intrinsic 是語言元素。
迭代器 catchall 運算子圖示 Iterator 產生圖形執行程序表的邏輯若找不到適當的 Iterator 圖示,就會顯示 Iterator 雜物箱圖示。 [雜物箱] 圖示不一定會指出錯誤條件。 [雜物箱] 圖示有三種:藍色 (迭代器)、橙色 (資料指標) 與綠色 (Transact-SQL 語言建構)。
書籤查閱運算子圖示 Key Lookup Key Lookup運算子是具有叢集索引之資料表上的書簽查閱。 資料 Argument 行包含叢集索引的名稱,以及用來查閱叢集索引中資料列的叢集索引鍵。 Key Lookup 一律會 Nested Loops 伴隨運算子。 如果資料行中 Argument 出現 WITH PREFETCH 子句,查詢處理器判斷在叢集索引中查閱書簽時,最好使用非同步預先擷取 (預先讀取) 。

在查詢計劃中使用 Key Lookup 運算子表示查詢可能受益于效能微調。 例如,您可以加入涵蓋索引來提高查詢效能。
索引鍵集資料指標運算子圖示 Keyset Keyset 運算子使用可以查看更新,但無法插入其他人所製作的資料指標。
語言項目 catchall 圖示 Language Element 產生圖形執行程序表的邏輯若找不到適當的 Iterator 圖示,就會顯示 Language Element 雜物箱圖示。 [雜物箱] 圖示不一定會指出錯誤條件。 [雜物箱] 圖示有三種:藍色 (迭代器)、橙色 (資料指標) 與綠色 (Transact-SQL 語言建構)。
多工緩衝處理運算子圖示 延遲多工緩衝處理 延遲多工緩衝處理邏輯運算子會將每個資料列從其輸入儲存在資料庫中的隱藏暫存物件中 tempdb 儲存。 例如,如果運算子 (重新復原,運算子 Nested Loops) 但不需要重新系結,則會使用多工緩衝處理的資料,而不是重新掃描輸入。 如果必須重新繫結的話,就丟棄多工緩衝處理的資料,然後重新掃描 (重新繫結) 輸入以重建多工緩衝處理物件。 「延遲多工緩衝處理」運算子會以「延遲」方式建立它的多工緩衝處理檔案,也就是說,每次多工緩衝處理的父系運算子要求一個資料列時,多工緩衝處理運算子就會從它的輸入運算子取得一個資料列,然後將它儲存在多工緩衝處理內,而不是一次取用所有資料列。 Lazy Spool 是邏輯運算子。
Left Anti Semi Join 當第二個 (下方) 輸入中沒有相符的資料列時,Left Anti Semi Join 運算子將會從第一個 (上方) 輸入傳回每一個資料列。 如果資料行中 Argument 沒有任何聯結述詞存在,則每個資料列都是相符的資料列。 Left Anti Semi Join 是邏輯運算子。
Left Outer Join Left Outer Join 運算子所傳回的每個資料列,皆滿足第一個 (上方) 輸入與第二個 (下方) 輸入的聯結。 它也會傳回第一個輸入中與第二個輸入完全不相符的任何資料列。 第二個輸入中的不符合資料列會以 null 值傳回。 如果資料行中 Argument 沒有任何聯結述詞存在,則每個資料列都是相符的資料列。 Left Outer Join 是邏輯運算子。
Left Semi Join 當第二個 (下方) 輸入中有相符的資料列時,Left Semi Join 運算子將會從第一個 (上方) 輸入傳回每一個資料列。 如果資料行中 Argument 沒有任何聯結述詞存在,則每個資料列都是相符的資料列。 Left Semi Join 是邏輯運算子。
記錄資料列掃描運算子圖示 Log Row Scan Log Row Scan 運算子會掃描交易記錄。 Log Row Scan 是邏輯與實體運算子。
合併間隔運算子圖示 Merge Interval Merge Interval 運算子會合併多個 (可能重疊) 間隔以產生最小的非重疊間隔,然後使用這些間隔,尋找索引項目。 此運算子通常會出現在運算子的一或多個 Compute Scalar 運算子 Constant Scan 上方,其建構間隔 (以資料列中的資料行表示,) 此運算子合併。 Merge Interval 是邏輯與實體運算子。
合併聯結運算子圖示 合併聯結 「合併聯結」運算子會執行內部聯結、左方外部聯結、左方半聯結、左方反半聯結、右方外部聯結、右方半聯結、右方反半聯結,以及等位邏輯作業。

在資料 Argument 行中,如果作業執行一對多聯結,則 合併聯結 運算子會包含 MERGE: () 述詞,如果作業執行多對多聯結,則為多對多 MERGE: () 述詞。 資料 Argument 行也包含用來執行作業的資料行逗號分隔清單。 「合併聯結」運算子需要兩個輸入,依個別資料行排序,可能是利用在查詢計畫中明確地插入排序作業。 如果不需要明確的排序,合併聯結會特別有效;例如,如果資料庫中有合適的 B 型樹狀目錄索引,或如果排序次序可以由多個作業利用 (如合併聯結與含積存的分組功能)。 「合併聯結」是實體運算子。
巢狀迴圈運算子圖示 Nested Loops Nested Loops 運算子執行內部聯結、左方外部聯結、左方半聯結和左方反半聯結邏輯運算。 巢狀迴圈聯結通常會使用索引,在內部資料表中搜尋外部資料表的每個資料列。 查詢處理器會根據預期的成本,決定是否要排序外部輸入,以改進對內部輸入的索引搜尋位置。 根據執行的邏輯作業,符合資料行中 Argument (選擇性) 述詞的任何資料列,都傳回適用。 Nested Loops 是實體運算子。
非叢集索引刪除運算子圖示 Nonclustered Index Delete Nonclustered Index Delete運算子會從資料行中指定的 Argument 非叢集索引中刪除輸入資料列。 Nonclustered Index Delete 是實體運算子。
非叢集索引插入運算子圖示 Index Insert Index Insert運算子會將資料列從其輸入插入資料行中指定的 Argument 非叢集索引中。 Argument 資料行也包含 SET:() 述詞,指出每一個資料行設定的值。 Index Insert 是實體運算子。
非叢集索引掃描運算子圖示 Index Scan Index Scan運算子會從資料行中指定的 Argument 非叢集索引擷取所有資料列。 如果資料行中 Argument 出現選擇性 WHERE: () 述詞,則只會傳回滿足述詞的資料列。 Index Scan 是邏輯與實體運算子。
非叢集索引搜尋運算子圖示 Index Seek Index Seek 運算子使用索引的搜尋能力,從非叢集索引中擷取資料列。 資料 Argument 行包含所使用之非叢集索引的名稱。 它也包含 SEEK:() 述詞。 儲存引擎會使用索引來處理滿足 SEEK:() 述詞的資料列。 它可以選擇包含 WHERE:() 述詞,讓儲存引擎比對所有滿足 SEEK:() 述詞的資料列 (這麼做時不使用索引)。 如果資料 Argument 行包含 ORDERED 子句,查詢處理器已判斷資料列必須依照非叢集索引排序的順序傳回。 如果沒有 ORDERED 子句,儲存引擎會以最適當的方式搜尋索引 (不保證輸出會依序排列)。 讓輸出維持次序會比產生不按次序的輸出還要沒有效率。 Index Seek 是邏輯與實體運算子。
非叢集索引多工緩衝處理運算子圖示 索引多工緩衝處理 索引多工緩衝處理實體運算子包含資料行中的 Argument SEEK: () 述詞。 索引多工緩衝處理運算子會掃描其輸入資料列、將每一個資料列的複本放在儲存在 tempdb 資料庫中的隱藏多工緩衝 (處理檔案中,並只存在於查詢) 存留期,並在資料列上建置非叢集索引。 這讓您可以使用索引的搜尋能力來輸出滿足 SEEK:() 述詞的資料列。 例如,如果運算子 (重新換行, Nested Loops 運算子) 但不需要重新系結,則會使用多工緩衝處理資料,而不是重新掃描輸入。
非叢集索引更新運算子圖示 Nonclustered Index Update Nonclustered Index Update實體運算子會從資料行中指定的 Argument 非叢集索引輸入中更新資料列。 如果出現 SET:() 述詞,則每個更新的資料行都會設為這個值。 Nonclustered Index Update 是實體運算子。
線上索引插入運算子圖示 線上索引插入 「線上索引插入」實體運算子指出索引之建立、改變或卸除作業將於線上進行。 也就是說,基礎資料表資料在索引操作期間仍然可供使用者使用。
None Parallelism Parallelism運算子會執行散發資料流程、收集資料流程,以及重新分割資料流程邏輯作業。 資料 Argument 行可以包含 PARTITION COLUMNS: () 述詞,並以逗號分隔的資料行清單進行分割。 資料 Argument 行也可以包含 ORDER BY: () 述詞,列出資料行以在資料分割期間保留的排序次序。 Parallelism 是實體運算子。

注意:如果查詢已編譯為平行查詢,但在執行時間,它會以序列查詢的形式執行,則 SET STATISTICS XML 所產生的 Showplan 輸出,或使用 SQL Server Management Studio 中的 [包含實際執行計畫] 選項,將不會包含 RunTimeInformation 運算子的 Parallelism 元素。 在 SET STATISTICS PROFILE 輸出中,實際的資料列計數和實際執行數目會顯示運算子的 Parallelism 零。 當任一條件發生時,這表示 Parallelism 運算子只會在查詢編譯期間使用,而不是在執行時間查詢計劃中使用。 請注意,如果伺服器上有大量的並行載入,平行查詢計畫有時會以序列方式執行。
參數資料表掃描運算子圖示 Parameter Table Scan Parameter Table Scan 運算子會掃描在目前的查詢中當做參數使用的資料表。 一般而言,這是用於預存程序中的 INSERT 查詢。 Parameter Table Scan 是邏輯與實體運算子。
None 部分彙總 「部分彙總」用於平行計畫。 它將彙總函式套用至盡可能最多的輸入資料列,因此不需要寫入磁碟 (稱為「溢出」)。 Hash Match 是實作資料分割匯總的唯一實體運算子 (反覆運算器) 。 部分彙總 是邏輯運算子。
母體擴展查詢資料指標運算子圖示 Population Query Population Query 運算子會在開啟資料指標時,擴展資料指標的工作資料表。
重新整理查詢資料指標運算子圖示 Refresh Query Refresh Query 運算子會在提取緩衝區中提取資料列目前的資料。
遠端刪除運算子圖示 Remote Delete Remote Delete 運算子會刪除遠端物件的輸入資料列。 Remote Delete 是邏輯與實體運算子。
遠端索引搜尋 showplan 運算子遠端 遠端索引掃描 「遠端索引掃描」運算子會掃描 Argument 資料行中所指定的遠端索引。 「遠端索引掃描」是邏輯與實體運算子。
遠端索引搜尋 showplan 運算子遠端 遠端索引搜尋 「遠端索引搜尋」運算子會使用遠端索引物件的搜尋功能來擷取資料列。 資料 Argument 行包含所使用的遠端索引名稱,以及 SEEK: () 述詞。 「遠端索引搜尋」是邏輯實體運算子。
遠端插入運算子圖示 遠端插入 「遠端插入」運算子會將輸入資料列插入遠端物件。 「遠端插入」是邏輯與實體運算子。
遠端查詢運算子圖示 Remote Query Remote Query 運算子會對遠端來源送出查詢。 傳送至遠端伺服器的查詢文字會出現在 資料行中 ArgumentRemote Query 是邏輯與實體運算子。
遠端掃描運算子圖示 Remote Scan Remote Scan 運算子會掃描遠端物件。 遠端物件的名稱會出現在資料行中 ArgumentRemote Scan 是邏輯與實體運算子。
遠端更新運算子圖示 Remote Update Remote Update 運算子會更新遠端物件中的輸入資料列。 Remote Update 是邏輯與實體運算子。
重新分割資料流平行處理原則運算子圖示 重新分割資料流 「重新分割資料流」運算子會消耗多個資料流,並產生多個記錄的資料流。 記錄內容與格式不會變更。 如果查詢最佳化工具使用點陣圖篩選,輸出資料流中的資料列數會減少。 輸入資料流的每個資料錄會被放入一個輸出資料流。 如果這個運算子要保留次序,那麼所有輸入資料流都必須排序好,而且合併成數個排序的輸出資料流。 如果輸出已分割,資料 Argument 行就會包含 PARTITION COLUMNS: () 述詞和資料分割資料行。如果輸出已排序,資料 Argument 行會包含 ORDER BY: () 述詞和要排序的資料行。 重新分割資料流 是邏輯運算子。 此運算子只用於平行查詢計畫。
結果語言項目圖示 Result Result 運算子是在查詢計畫結束時所傳回的資料。 這通常是 Showplan 的根元素。 Result 是語言元素。
RID 查閱運算子圖示 RID Lookup RID Lookup 是堆積上的書籤查閱,它會使用提供的資料列識別碼 (RID)。 資料 Argument 行包含用來查閱資料表中資料列的書簽標籤,以及查詢資料列之資料表的名稱。 RID Lookup 一律都會伴隨 NESTED LOOP JOIN。 RID Lookup 是實體運算子。 如需書籤查閱的詳細資訊,請參閱 MSDN SQL Server 部落格中的書籤查閱
Right Anti Semi Join Right Anti Semi Join 運算子會在第一個 (上方) 輸入中沒有符合資料列存在時,輸出第二個 (下方) 輸入中的每一列。 比對資料列定義為符合資料行述 Argument 詞的資料列, (如果沒有述詞,則每個資料列都是相符的資料列) 。 Right Anti Semi Join 是邏輯運算子。
Right Outer Join Right Outer Join 運算子所傳回的每個資料列,皆滿足第二個 (下方) 輸入與第一個 (上方) 輸入之每個相符資料列的聯結。 它也會傳回第二個輸入中與第一個輸入完全不相符的任何資料列,以 NULL 相聯結。 如果資料行中 Argument 沒有任何聯結述詞存在,則每個資料列都是相符的資料列。 Right Outer Join 是邏輯運算子。
Right Semi Join 當第一個 (頂端) 輸入有相符的資料列時,Right Semi Join 運算子會從第二個 (底端) 輸入傳回每一個資料列。 如果資料行中 Argument 沒有任何聯結述詞存在,則每個資料列都是相符的資料列。 Right Semi Join 是邏輯運算子。
資料列計數多工緩衝處理運算子圖示 資料列計數多工緩衝處理 「資料列計數多工緩衝處理」運算子會掃描輸入、計算共有多少資料列,然後傳回一樣多但不含任何資料的資料列。 如果重點是檢查資料列是否存在,而不是資料列中是否包含資料,就可以使用這個運算子。 例如,如果 Nested Loops 運算子執行左半聯結作業,而聯結述詞會套用至內部輸入,則資料列計數多工緩衝處理可能會放在運算子的內部輸入 Nested Loops 頂端。 Nested Loops然後,運算子可以判斷資料列計數多工緩衝處理 (輸出多少個數據列,因為不需要內部資料) 判斷是否要傳回外部資料欄。 「資料列計數多工緩衝處理」是實體運算子。
區段運算子圖示 區段 「區段」是實體和邏輯運算子。 它會根據一或多個資料行的值,將輸入集分割為區段。 這些資料行在「區段」運算子中會顯示為引數。 然後運算子一次會輸出一個區段。
Segment Repartition 在平行查詢計畫中,有時候會有 Iterator 的概念區。 在這種區域內的所有 Iterator,都可以由平行執行緒來執行。 區域本身必須連續執行。 個別區域內的一些 Parallelism Iterator,稱為 Branch Repartition。 在兩個這種區域的界限上的 Parallelism Iterator,稱為 Segment RepartitionBranch RepartitionSegment Repartition 是邏輯運算子。
序列運算子圖示 Sequence Sequence 運算子會驅動大範圍的更新計畫。 在功能上,它會依序執行每個輸入 (由上而下)。 每個輸入通常是更新不同的物件。 它只會傳回來自最後一個 (下方) 輸入的資料列。 Sequence 是邏輯與實體運算子。
序列專案運算子圖示 Sequence Project Sequence Project 運算子會加入資料行以執行已排序集合的計算。 它會根據一或多個資料行的值,將輸入集分割為區段。 然後運算子一次會輸出一個區段。 這些資料行在 Sequence Project 運算子中會顯示為引數。 Sequence Project 是邏輯與實體運算子。
快照集資料指標運算子圖示 快照式 「快照式」運算子會建立一個資料指標,而不會看到其他人所做的變更。
排序運算子圖示 Sort Sort運算子會排序所有傳入的資料列。 如果此作業移除重複專案,則資料 Argument 行包含 DISTINCT ORDER BY: () 述詞,或是具有排序資料行逗號分隔清單的 ORDER BY: () 述詞。 如果將資料行依遞增順序排序,資料行前會加上 ASC 值,如果將資料行依遞減順序排序,資料行前會加上 DESC 值。 Sort 是邏輯與實體運算子。
分割運算子圖示 Split Split運算子可用來優化更新處理。 它會將每個更新分割成一個刪除和一個插入作業。 Split 是邏輯與實體運算子。
多工緩衝處理運算子圖示 多工緩衝處理 多工緩衝處理運算子會將中繼查詢結果儲存至 tempdb 資料庫。
資料流彙總運算子圖示 Stream Aggregate Stream Aggregate 運算子會依據一個或多個資料行將資料列分組,然後計算查詢所傳回的一個或多個彙總運算式。 這個運算子的輸出可稍後由查詢中的運算子參考,並/或傳回到用戶端。 Stream Aggregate 運算子需要其群組內的輸入項目依資料行排列。 如果資料因為前面的 Sort 運算子或因為已排序索引搜尋或掃描,而尚未進行排序,最佳化工具就會在這個運算子之前使用 Sort 運算子。 在 SHOWPLAN_ALL 語句或 SQL Server Management Studio 中的圖形化執行計畫中,GROUP BY 述詞中的資料行會列在 資料行中 Argument ,而匯總運算式會列在[定義值] 資料行中。 Stream Aggregate 是實體運算子。
切換運算子圖示 開關 「參數」是一種特殊類型的串連 Iterator,它有 n 個輸入。 運算式與每一個「參數」運算子相關聯。 根據運算式的傳回值 (介於 0 和 n-1 之間),「參數」會將適當的輸入資料流複製到輸出資料流。 「參數」的用途之一是實作查詢計畫,包括利用某些運算子向前快轉資料指標,例如 TOP 運算子。 「參數」同時為邏輯和實體運算子。
資料表刪除運算子圖示 Table Delete Table Delete實體運算子會從查詢執行計畫之資料行中指定的 Argument 資料表中刪除資料列。
資料表插入運算子圖示 Table Insert Table Insert運算子會將資料列從其輸入插入查詢執行計畫之資料行中指定的 Argument 資料表。 Argument 資料行也包含 SET:() 述詞,指出每一個資料行設定的值。 如果 Table Insert 沒有插入值的子系,則會從插入運算子本身取得插入的資料列。 Table Insert 是實體運算子。
資料表合併運算子 資料表合併 「資料表合併」運算子會將合併資料流套用到堆積中。 運算子會刪除、更新或插入運算子資料行中所指定之資料表中的資料 Argument 列。 實際執行的作業取決於運算子資料行中所 Argument 指定ACTION資料行的運行時間值。 「資料表合併」是實體運算子。
資料表掃描運算子圖示 Table Scan Table Scan運算子會從查詢執行計畫之資料行中指定的 Argument 資料表擷取所有資料列。 如果資料行中 Argument 出現 WHERE: () 述詞,則只會傳回滿足述詞的資料列。 Table Scan 是邏輯與實體運算子。
資料表多工緩衝處理運算子圖示 資料表多工緩衝處理 「資料表多工緩衝處理」運算子會掃描輸入,並將每個資料列的複本放入隱藏的多工緩衝資料表 (儲存在 tempdb 資料庫,直到查詢結束就不再存在)。 例如,如果運算子 (重新復原,運算子 Nested Loops) 但不需要重新系結,則會使用多工緩衝處理的資料,而不是重新掃描輸入。 「資料表多工緩衝處理」是實體運算子。
資料表更新運算子圖示 Table Update 實體運算子會 Table Update 更新查詢執行計畫資料行所 Argument 指定資料表中的輸入資料列。 SET:() 述詞決定每個更新資料行的值。 在 SET 子句中或這個運算子中,以及這個查詢中的其他位置,皆可參考這些數值。
資料表值函式運算子圖示 資料表值函式 「資料表值函式」運算子會評估資料表值函數 (Transact-SQL 或 CLR),並將產生的資料列儲存至 tempdb 資料庫。 當父反覆運算器要求資料列時, 資料表值函式 會從 tempdb 傳回資料列。

含有呼叫資料表值函數的查詢會產生內含「資料表值函式」Iterator 的查詢計畫。 「資料表值函式」可以使用不同的參數值進行評估:

「資料表值函式 XML 讀取器」可輸入 XML BLOB 作為參數,並以 XML 文件的順序,產生代表 XML 節點的資料列集。 其他的輸入參數可能會限制傳回給 XML 文件子集的 XML 節點。

具有 XPath 篩選的資料表值函式 XML 讀取器 是一種特殊的 XML 讀取器資料表值函 式,可將輸出限制為滿足 XPath 運算式的 XML 節點。



「資料表值函式」是邏輯與實體運算子。
頂端運算子圖示 前幾個 「頂端」運算子會掃描輸入,可能會根據排序的先後順序,只傳回指定數目或百分比的資料列。 資料 Argument 行可以包含正在檢查系結的資料行清單。 在更新計畫中,可使用「頂端」運算子強行限制資料列數。 「頂端」是邏輯與實體運算子。 「頂端」是邏輯與實體運算子。
None 前 N 個排序 前 N 個排序 類似于 Sort 反覆運算器,不同之處在于只需要前 N 個 資料列,而不是整個結果集。 若 N 值較小,SQL Server 查詢執行引擎會嘗試在記憶體中執行整個排序作業。 若 N的值較大,則查詢執行引擎會訴諸比較一般性的排序方法,而不採用 N 作為參數。
擴充運算子 (UDX) 圖示 UDX 擴充運算子 (UDX) 會在 SQL Server 中實作許多 XQuery 和 XPath 作業的其中一項。 所有 UDX 運算子都是邏輯和實體運算子。

擴充運算子 (UDX) FOR XML 用於序列化關聯式資料列集,它會在單一輸出資料列的單一 BLOB 資料行中,以 XML 表示法輸入這個資料列集。 這是一個會區分順序的 XML 彙總運算子。

擴充運算子 (UDX) XML SERIALIZER 是區分順序的 XML 彙總運算子, 會以 XML 文件順序來輸入用於表示 XML 節點或 XQuery 純量的資料列,並在單一輸出資料列的單一 XML 資料行中產生序列化的 XML BLOB。

擴充運算子 (UDX) XML FRAGMENT SERIALIZER 是特殊類型的 XML SERIALIZER,可用於處理輸入資料列,而此輸入資料列用於表示要插入至 XQuery 插入資料修改延伸模組的 XML 片段。

擴充運算子 (UDX) XQUERY STRING 會評估用於表示 XML 節點之輸入資料列的 XQuery 字串值。 這是一個區分順序的字串彙總運算子。 它會輸出一個資料列以及多個資料行,每個資料行都代表含有輸入字串值的 XQuery 純量。

擴充運算子 (UDX) XQUERY LIST DECOMPOSER 是 XQuery 清單分解運算子。 針對代表 XML 節點的每一個輸入資料列,會產生代表 XQuery 純量的一或多個資料列,而如果輸入是 XSD 清單類型,則包含清單元素值。

擴充運算子 (UDX) XQUERY DATA 會評估表示 XML 節點之輸入的 XQuery fn:data() 函數。 這是一個區分順序的字串彙總運算子。 它會輸出一個資料列以及多個資料行,每個資料行都代表含有 fn:data() 結果的 XQuery 純量。

擴充運算子 XQUERY CONTAINS 會評估表示 XML 節點之輸入的 XQuery fn:contains() 函數。 這是一個區分順序的字串彙總運算子。 它會輸出一個資料列以及多個資料行,每個資料行都代表含有 fn:contains() 結果的 XQuery 純量。

擴充運算子 UPDATE XML NODE 會更新 XQuery 中的 XML 節點,取代 XML 類型上 modify () 方法中的資料修改延伸模組。
None Union Union 運算子會掃描多個輸入,輸出掃描的每一資料列,並移除重複項。 Union 是邏輯運算子。
更新 (資料庫引擎) 運算子圖示 Update Update運算子會從查詢執行計畫資料行中指定的 Argument 物件中,從其輸入更新每個資料列。 Update 是邏輯運算子。 實體運算子是 Table UpdateIndex UpdateClustered Index Update
While 語言項目圖示 While 運算子 While 會實作 Transact-SQL while 迴圈。 While 是語言元素。
資料表多工緩衝處理運算子圖示 Window Spool Window Spool 運算子會將每一列展開成一組資料列,分別代表與其關聯的視窗。 查詢中的 OVER 子句會定義查詢結果集中的視窗,以及一個計算視窗中各資料列值的視窗函數。 Window Spool 是邏輯與實體運算子。