SQLSERVER中的各種執行計划
網址:http://technet.microsoft.com/zh-cn/library/ms191158.aspx
本節介紹了各個邏輯運算符和物理運算符。
圖形執行計划圖標 |
Showplan 運算符 |
說明 |
||
---|---|---|---|---|
無 |
Aggregate |
Aggregate 運算符計算包含 MIN、MAX、SUM、COUNT 或 AVG 的表達式。 Aggregate 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Arithmetic Expression |
Arithmetic Expression 運算符根據行中的現有值計算新值。 SQL Server 2012 中不使用 Arithmetic Expression, |
||
|
Assert |
Assert 運算符用於驗證條件。 例如,驗證引用完整性或確保標量子查詢返回一行。 對於每個輸入行,Assert 運算符都要計算執行計划的Argument 列中的表達式。 如果此表達式的值為 NULL,則通過 Assert 運算符傳遞該行,並且查詢執行將繼續。 如果此表達式的值非 Null,則將產生相應的錯誤。 Assert 運算符是一個物理運算符。 |
||
|
Assign |
Assign 運算符將表達式的值或常量分配給變量。 Assign 是一個語言元素。 |
||
無 |
Asnyc Concat |
Asnyc Concat 運算符僅用於遠程查詢(分布式查詢)。 它有 n 個子節點和一個父節點。 通常,某些子節點是參與分布式查詢的遠程計算機。 Asnyc Concat 同時向所有子節點發出 open() 調用,然后將位圖應用於每個子節點。 對於為 1 的每個位,Async Concat 按需向父節點發送輸出行。 |
||
|
Bitmap |
SQL Server 使用 Bitmap 運算符來實現並行查詢計划中的位圖篩選。 在將行傳遞給另一個運算符(如 Parallelism 運算符)之前,通過消除無法生成任何聯接記錄的鍵值的行,位圖篩選可提高查詢的執行速度。 位圖篩選器使用運算符樹某部分的表中一組值的簡潔表示形式來篩選位於該樹另一部分的第二張表中的行。 通過在查詢中預先刪除不必要的行,后續運算符將處理較少的行,從而提高查詢的整體性能。優化器將確定位圖的選擇性何時可滿足使用條件以及在哪些運算符上應用篩選器。 Bitmap 是一個物理運算符。 |
||
![]() |
Bitmap Create |
Bitmap Create 運算符出現在創建位圖的顯示計划輸出中。 Bitmap Create 是一個邏輯運算符。 |
||
|
Bookmark Lookup |
Bookmark Lookup 運算符使用書簽(行 ID 或聚集鍵)在表或聚集索引內查找相應的行。 Argument 列包含書簽標簽,用於在表或聚集索引內查找行。 Argument 列還包含要查找的行所在的表或聚集索引的名稱。 如果 Argument 列中出現 WITH PREFETCH 子句,則表示查詢處理器已決定在表或聚集索引內查找書簽時將使用異步預提取(預讀)作為最佳選擇。 SQL Server 2012 中不使用 Bookmark Lookup, 而由 Clustered Index Seek 和 RID Lookup 提供書簽查找功能。 Key Lookup 運算符也提供此功能。 |
||
無 |
Branch Repartition |
在並行查詢計划中,有時存在迭代器的概念性區域。 此類區域中的所有迭代器都可通過並行線程執行。 這些區域本身必須串行執行。 單個區域內的某些 Parallelism 迭代器稱為 Branch Repartition。 兩個這樣的區域邊界上的 Parallelism 迭代器稱為 Segment Repartition。Branch Repartition 和 Segment Repartition 是邏輯運算符。 |
||
無 |
Broadcast |
Broadcast 有一個子節點和 n 個父節點。 Broadcast 根據使用者的請求將其輸入行發送給多個使用者。 每個使用者都將獲得所有行。 例如,如果所有使用者都是哈希聯接的生成端,則將生成 n 份哈希表。 |
||
![]() |
Build Hash |
指示為 xVelocity 內存優化的列存儲索引生成批處理哈希表。 |
||
無 |
Cache |
Cache 是一個專門的 Spool 運算符。 它僅存儲一行數據。 Cache 是一個邏輯運算符。 SQL Server 2012 中不使用 Cache。 |
||
|
Clustered Index Delete |
Clustered Index Delete 運算符可刪除查詢執行計划的 Argument 列指定的群集索引中的行。 如果 Argument 列中存在 WHERE:() 謂詞,則僅刪除滿足該謂詞要求的行。Clustered Index Delete 是一個物理運算符。 |
||
|
Clustered Index Insert |
Clustered Index Insert Showplan 運算符可將其輸入中的行插入在 Argument 列指定的聚集索引中。 Argument 列還包含一個 SET:() 謂詞,用於指示為每一列設置的值。 如果 Clustered Index Insert 的插入值沒有子項,則插入的行來自 Insert 運算符本身。Clustered Index Insert 是一個物理運算符。 |
||
|
Clustered Index Merge |
Clustered Index Merge 運算符可將合並數據流應用於聚集索引。 該運算符可在其 Argument 列中所指定的聚集索引中刪除、更新或插入行。 執行的實際操作取決於該運算符的 Argument 列中指定的 ACTION 列的運行時值。 Clustered Index Merge 是一個物理運算符。 |
||
|
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 既是一個邏輯運算符,也是一個物理運算符。 在 SET STATISTICS XML 生成的顯示計划中出現的 Compute Scalar 運算符可能不包含 RunTimeInformation 元素。 在圖形顯示計划中,當已在 SQL Server Management Studio 中選中“包括實際的執行計划”選項時,“實際行”、“實際重新綁定次數”和“實際重繞次數”可能不會出現在“屬性”窗口中。 當出現這種情況時,意味着雖然編譯過的查詢計划中使用了這些運算符,但在運行時查詢計划中,它們的作用是由其他運算符實現的。 另外,請注意,SET STATISTICS PROFILE 生成的顯示計划輸出中的執行數等於 SET STATISTICS XML 生成的顯示計划中的重新綁定次數和重繞次數的總和。 |
||
|
Concatenation |
Concatenation 運算符掃描多個輸入,並返回每個掃描的行。 Concatenation 通常用於實現 Transact-SQL UNION ALL 結構。Concatenation 物理運算符有兩個或多個輸入,有一個輸出。 Concatenation 將行從第一個輸入流復制到輸出流,然后對其他輸入流重復進行此操作。 Concatenation 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Constant Scan |
Constant Scan 運算符可將一個或多個常量行引入到查詢中。 Compute Scalar 運算符通常在 Constant Scan 之后使用,以將列添加到Constant Scan 運算符生成的行中。 |
||
|
Convert |
Convert 運算符將標量數據類型轉換為另一種類型。 Convert 是一個語言元素。 |
||
無 |
Cross Join |
Cross Join 運算符將第一個(頂端)輸入中的每一行與第二個(底端)輸入中的每一行聯接在一起。 Cross Join 是一個邏輯運算符。 |
||
|
catchall |
生成圖形顯示計划的邏輯找不到迭代器的合適圖標時,將顯示通用圖標。 通用圖標不一定指示存在錯誤。 有三種通用圖標:藍色(用於迭代器)、橙色(用於游標)和綠色(用於 Transact-SQL 語言元素)。 |
||
無 |
Cursor |
Cursor 邏輯運算符和物理運算符用於描述涉及游標操作的查詢或更新的執行方式。 其中物理運算符描述用於處理游標(如使用鍵集驅動游標)的物理實現算法。 游標執行過程的每一步都涉及物理運算符。 而邏輯運算符描述游標的屬性,如游標是只讀。 邏輯運算符包括 Asynchronous、Optimistic、Primary、Read Only、Scroll Locks、Secondary 和 Synchronous。 物理運算符包括 Dynamic、Fetch Query、Keyset、Population Query、Refresh Query 和 Snapshot。 |
||
|
Declare |
Declare 運算符用於分配查詢計划中的局部變量。 Declare 是一個語言元素。 |
||
|
Delete |
Delete 運算符將從對象中刪除滿足 Argument 列內的可選謂詞的行。 |
||
|
Deleted Scan |
Deleted Scan 運算符在觸發器中掃描刪除的表。 |
||
無 |
Distinct |
Distinct 運算符可以從行集或值集中刪除重復項。 Distinct 是一個邏輯運算符。 |
||
無 |
Distinct Sort |
Distinct Sort 邏輯運算符將對輸入進行掃描,刪除重復項並按 Argument 列的 DISTINCT ORDER BY:() 謂詞中指定的列進行排序。 Distinct Sort 是一個邏輯運算符。 |
||
|
Distribute Streams |
Distribute Streams 運算符僅用於並行查詢計划。 Distribute Streams 運算符接收記錄的單個輸入流,並生成多個輸出流。 記錄的內容和格式不會改變。 輸入流中的每個記錄都將在某個輸出流中顯示。 此運算符在輸出流中自動保留輸入記錄的相對順序。 通常情況下,使用哈希操作確定特定輸入記錄所屬的輸出流。 如果將輸出分區,那么 Argument 列會包含 PARTITION COLUMNS:() 謂詞和分區列。 Distribute Streams 是一個邏輯運算符。 |
||
|
Dynamic |
Dynamic 運算符使用可以查看其他游標所做的任何更改的游標。 |
||
|
Eager Spool |
Eager Spool 運算符獲取整個輸入,並將每行存儲在 tempdb 數據庫中存儲的隱藏臨時對象中。 如果重繞該運算符(例如通過 Nested Loops 運算符重繞),但不需要任何重新綁定,則將使用假脫機數據,而不用重新掃描輸入。 如果需要重新綁定,將丟棄假脫機數據,並通過重新掃描(重新綁定的)輸入重新生成假脫機對象。 Eager Spool 運算符按“急切”方式生成自己的假脫機文件:當假脫機的父運算符請求第一行時,假脫機運算符將獲取所有來自其輸入運算符的行並將其存儲在假脫機中。 Eager Spool 是一個邏輯運算符。 |
||
|
Fetch Query |
當對游標發出提取命令時,Fetch Query 運算符將檢索行。 |
||
|
Filter |
Filter 運算符掃描輸入,僅返回那些符合 Argument 列中的篩選表達式(謂詞)的行。 |
||
無 |
Flow Distinct |
Flow Distinct 邏輯運算符用於通過掃描輸入來刪除重復項。 雖然 Distinct 運算符在生成任何輸入前使用所有的輸入,但 FlowDistinct 運算符在從輸入獲得行時返回每行(除非該行是一個重復項,若是這樣則刪除該行)。 |
||
無 |
Full Outer Join |
Full Outer Join 邏輯運算符從第一個(頂端)輸入中與第二個(底端)輸入相聯接的行中返回每個滿足聯接謂詞的行。 它還可以從下列輸入返回行:
不包含匹配值的輸入將作為空值返回。 Full Outer Join 是一個邏輯運算符。 |
||
|
Gather Streams |
Gather Streams 運算符僅用在並行查詢計划中。 Gather Streams 運算符處理幾個輸入流並通過組合這幾個輸入流生成單個記錄輸出流。不更改記錄的內容和格式。 如果此運算符保留順序,則所有的輸入流都必須有序。 如果輸出已排序,則 Argument 列包含一個 ORDER BY:() 謂詞和正在排序的列名稱。 Gather Streams 是一個邏輯運算符。 |
||
|
Hash Match |
Hash Match 運算符通過計算其生成輸入中每行的哈希值生成哈希表。 HASH:() 謂詞以及一個用於創建哈希值的列的列表出現在 Argument列內。 然后,該謂詞為每個探測行(如果適用)計算哈希值(使用相同的哈希函數)並在哈希表內查找匹配項。 如果存在殘留謂詞(由Argument 列中的 RESIDUAL:() 標識),則還須滿足此殘留謂詞,只有這樣行才能被視為是匹配項。 行為取決於所執行的邏輯操作:
Hash Match 是一個物理運算符。 |
||
|
If |
If 運算符執行基於表達式的有條件處理。 If 是一個語言元素。 |
||
無 |
Inner Join |
Inner Join 邏輯運算符返回滿足第一個(頂端)輸入與第二個(底端)輸入所組成的聯接的每一行。 |
||
|
Insert |
Insert 邏輯運算符將每行從其輸入插入 Argument 列內指定的對象中。 相應的物理運算符為 Table Insert、Index Insert 或 Clustered Index Insert 運算符。 |
||
|
Inserted Scan |
Inserted Scan 運算符掃描插入的表。 Inserted Scan 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Intrinsic |
Intrinsic 運算符調用內部 Transact-SQL 函數。 Intrinsic 是一個語言元素。 |
||
|
Iterator |
生成圖形顯示計划的邏輯找不到 Iterator 的合適圖標時,將顯示通用圖標。 通用圖標不一定指示存在錯誤。 有三種通用圖標:藍色(用於迭代器)、橙色(用於游標)和綠色(用於 Transact-SQL 語言構造)。 |
||
|
Key Lookup |
Key Lookup 運算符是在具有聚集索引的表上進行的書簽查找。 Argument 列包含聚集索引的名稱和用來在聚集索引中查找行的聚集鍵。Key Lookup 通常帶有 Nested Loops 運算符。 如果 Argument 列中出現 WITH PREFETCH 子句,則表示查詢處理器已決定在聚集索引內查找書簽時將使用異步預提取(預讀)作為最佳選擇。 在查詢計划中使用 Key Lookup 運算符表明該查詢可能會從性能優化中獲益。 例如,添加涵蓋索引可能會提高查詢性能。 |
||
|
Keyset |
Keyset 運算符使用的游標可用於查看其他用戶所做的更新,而不能查看其他用戶所做的插入。 |
||
|
Language Element |
生成圖形顯示計划的邏輯找不到 Language Element 的合適圖標時,將顯示通用圖標。 通用圖標不一定指示存在錯誤。 有三種通用圖標:藍色(用於迭代器)、橙色(用於游標)和綠色(用於 Transact-SQL 語言構造)。 |
||
|
Lazy Spool |
Lazy Spool 邏輯運算符將其輸入中的每一行存儲到 tempdb 數據庫內存儲的隱藏臨時對象中。 如果重繞該運算符(例如通過 Nested Loops 運算符重繞),但不需要任何重新綁定,則將使用假脫機數據,而不用重新掃描輸入。 如果需要重新綁定,則將放棄假脫機數據,並通過重新掃描(重新綁定的)輸入重新生成假脫機對象。 Lazy Spool 運算符以“遲緩”方式生成其假脫機文件,即每當假脫機父運算符請求一行時,假脫機運算符便從其輸入運算符獲取一行,然后將該行存儲在假脫機中,而不是一次處理所有行。 Lazy Spool 是一個邏輯運算符。 |
||
無 |
Left Anti Semi Join |
當第二個(底端)輸入中沒有匹配行時,Left Anti Semi Join 運算符返回第一個(頂端)輸入中的每一行。 如果 Argument 列內不存在任何聯接謂詞,則每行都是一個匹配行。 Left Anti Semi Join 是一個邏輯運算符。 |
||
無 |
Left Outer Join |
Left Outer Join 運算符返回滿足第一個(頂端)輸入與第二個(底端)輸入聯接的每一行。 它還返回任何在第二個輸入中沒有匹配行的第一個輸入中的行。 第二個輸入中的非匹配行作為空值返回。 如果 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 運算符可合並多個(可能重疊的)間隔以得出最小的不重疊間隔,然后將其用於查找索引項。 此運算符通常出現在Constant Scan 運算符中的一個或多個 Compute Scalar 運算符上方,后者運算符構造了此運算符所合並的間隔(表示為一行中的多個列)。Merge Interval 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Merge Join |
Merge Join 運算符執行內部聯接、左外部聯接、左半部聯接、左反半部聯接、右外部聯接、右半部聯接、右反半部聯接和聯合邏輯運算。 在 Argument 列中,如果操作執行一對多聯接,則 Merge Join 運算符將包含 MERGE:() 謂詞;如果操作執行多對多聯接,則該運算符將包含 MANY-TO-MANY MERGE:() 謂詞。 Argument 列還包含一個用於執行操作的列的列表,該列表以逗號分隔。 Merge Join 運算符要求在各自的列上對兩個輸入進行排序,這可以通過在查詢計划中插入顯式排序操作來實現。 如果不需要顯式排序(例如,如果數據庫內有合適的 B 樹索引或可以對多個操作(如合並聯接和對匯總分組)使用排序順序),則合並聯接尤其有效。 Merge Join 是一個物理運算符。 |
||
|
Nested Loops |
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 列中指定的非聚集索引中檢索所有行。 如果可選的 WHERE:() 謂詞出現在 Argument 列中,則僅返回滿足此謂詞的那些行。 Index Scan 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Index Seek |
Index Seek 運算符利用索引的查找功能從非聚集索引中檢索行。 Argument 列包含所使用的非聚集索引的名稱。 它還包括 SEEK:() 謂詞。存儲引擎僅使用索引來處理滿足 SEEK:() 謂詞的行。 它可能還包含一個 WHERE:() 謂詞,其中存儲引擎對滿足 SEEK:() 謂詞的所有行進行計算(不使用索引來完成)。 如果 Argument 列包含 ORDERED 子句,則表示查詢處理器已決定必須按非聚集索引排序行的順序返回行。 如果沒有 ORDERED 子句,則存儲引擎將以最佳方式(不保證對輸出排序)搜索索引。 如果讓輸出保持其順序,則效率可能低於生成非排序輸出。 Index Seek 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Index Spool |
Index Spool 物理運算符在 Argument 列中包含 SEEK:() 謂詞。 Index Spool 運算符掃描其輸入行,將每行的副本放置在隱藏的假脫機文件(存儲在 tempdb 數據庫中且只在查詢的生存期內存在)中,並為這些行創建非聚集索引。 這樣可以使用索引的查找功能來僅輸出那些滿足 SEEK:() 謂詞的行。 如果重繞該運算符(例如通過 Nested Loops 運算符重繞),但不需要任何重新綁定,則將使用假脫機數據,而不用重新掃描輸入。 |
||
|
Nonclustered Index Update |
Nonclustered Index Update 物理運算符用於更新 Argument 列內指定的非聚集索引中的輸入行。 如果存在 SET:() 謂詞,則將每個更新的列設置為該值。 Nonclustered Index Update 是一個物理運算符。 |
||
|
Online Index Insert |
Online Index Insert 物理運算符指示索引創建、更改或刪除操作是在線執行的。 也就是說,基礎表數據在索引操作期間仍然對用戶可用。 |
||
無 |
Parallelism |
Parallelism 運算符執行分發流、收集流和對流重新分區邏輯操作。 Argument 列可以包含一個 PARTITION COLUMNS:() 謂詞和一個以逗號分隔的分區列的列表。 Argument 列還可以包含一個 ORDER BY:() 謂詞,以列出分區過程中要保留排序順序的列。 Parallelism 是物理運算符。
|
||
|
Parameter Table Scan |
Parameter Table Scan 運算符掃描在當前查詢中用作參數的表。 該運算符一般用於存儲過程內的 INSERT 查詢。 Parameter Table Scan既是一個邏輯運算符,也是一個物理運算符。 |
||
無 |
Partial Aggregate |
Partial Aggregate 用於並行計划中。 它將聚合功能應用到盡可能多的輸入行中,以便不必執行向磁盤寫入數據的操作(稱為“溢出”)。Hash Match 是實現分區聚合的唯一一個物理運算符(迭代器)。 Partial Aggregate 是一個邏輯運算符。 |
||
|
Population Query |
Population Query 運算符在打開游標時填充游標的工作表。 |
||
|
Refresh Query |
Refresh Query 運算符為提取緩沖區中的行提取當前數據。 |
||
|
Remote Delete |
Remote Delete 運算符用於從遠程對象中刪除輸入行。 Remote Delete 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Remote Index Scan |
Remote Index Scan 運算符可以掃描在 Argument 列中指定的遠程索引。 Remote Index Scan 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Remote Index Seek |
Remote Index Seek 運算符利用遠程索引對象的查找功能來檢索行。 Argument 列包含所使用的遠程索引名稱和 SEEK:() 謂詞。 Remote Index Seek 是一個邏輯物理運算符。 |
||
|
Remote Insert |
Remote Insert 運算符將輸入行插入到遠程對象。 Remote Insert 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Remote Query |
Remote Query 運算符將查詢提交給遠程源。 發送給遠程服務器的查詢文本顯示在 Argument 列中。 Remote Query 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Remote Scan |
Remote Scan 運算符掃描遠程對象。 遠程對象的名稱顯示在 Argument 列中。 Remote Scan 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Remote Update |
Remote Update 運算符將更新遠程對象中的輸入行。 Remote Update 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Repartition Streams |
Repartition Streams 運算符使用多個流並生成多個記錄流。 記錄的內容和格式不會改變。 如果查詢優化器使用位圖篩選器,則輸出流中行的數量將減少。 輸入流中的每個記錄都放入一個輸出流中。 如果該運算符保留次序,則必須對所有輸入流排序並將它們合並到幾個有序的輸出流中。 如果將輸出分區,那么 Argument 列會包含 PARTITION COLUMNS:() 謂詞和分區列。如果輸出已經排序,則 Argument 列包含一個 ORDER BY:() 謂詞和已經排序的列。 Repartition Streams 是一個邏輯運算符。 該運算符只用於並行查詢計划中。 |
||
|
Result |
Result 運算符是查詢計划結束時返回的數據。 它通常是顯示計划的根元素。 Result 是一個語言元素。 |
||
|
RID Lookup |
RID Lookup 是使用提供的行標識符 (RID) 在堆上進行的書簽查找。 Argument 列包含用於查找表中的行的書簽標簽和從中查找行的表的名稱。 RID Lookup 通常帶有 NESTED LOOP JOIN。 RID Lookup 是一個物理運算符。 有關書簽查找的詳細信息,請參閱 MSDN SQL Server 博客中的 Bookmark Lookup(書簽查找)。 |
||
無 |
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 是一個邏輯運算符。 |
||
|
Row Count Spool |
Row Count Spool 運算符掃描輸入,計算現有的行數並返回相同數目的不包含任何數據的行。 必須檢查現有行數(而非行中包含的數據)時,使用此運算符。 例如,如果 Nested Loops 運算符執行左半聯接操作且聯接謂詞應用於內部輸入,則可以在 Nested Loops 運算符內部輸入的頂部放置行計數假脫機。 這樣,Nested Loops 運算符就可以確定行計數假脫機輸出的行數(因為不需要內側的實際數據)以決定是否返回外部行。 Row Count Spool 是一個物理運算符。 |
||
|
Segment |
Segment 既是一個物理運算符,也是一個邏輯運算符。 它基於一個或多個列的值將輸入集划分成多個段。 這些列顯示為 Segment 運算符中的參數。 然后此運算符每次輸出一個段。 |
||
無 |
Segment Repartition |
在並行查詢計划中,有時存在迭代器的概念性區域。 此類區域中的所有迭代器都可通過並行線程執行。 這些區域本身必須串行執行。 單個區域內的某些 Parallelism 迭代器稱為 Branch Repartition。 兩個這樣的區域邊界上的 Parallelism 迭代器稱為 Segment Repartition。Branch Repartition 和 Segment Repartition 是邏輯運算符。 |
||
|
Sequence |
Sequence 運算符驅動大范圍的更新計划。 就其功能而言,該運算符按順序(從上到下)執行每個輸入。 每個輸入通常是不同對象的更新。 該運算符只返回其上一個(底端)輸入中的行。 Sequence 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Sequence Project |
Sequence Project 運算符將添加列以便計算有序集。 它基於一個或多個列的值將輸入集划分成多個段。 然后此運算符每次輸出一個段。這些列在 Sequence Project 運算符中作為參數顯示。 Sequence Project 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Snapshot |
Snapshot 運算符創建一個看不到其他人所做更改的游標。 |
||
|
Sort |
Sort 運算符可對所有傳入的行進行排序。 Argument 列包含 DISTINCT ORDER BY:() 謂詞(如果此操作刪除了重復項),或 ORDER BY:() 謂詞(如果對逗號分隔的列列表進行排序)。 如果按升序對列排序,則使用值 ASC 作為列的前綴;如果按降序對列排序,則使用值 DESC 作為列的前綴。 Sort 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Split |
Split 運算符用於優化更新處理。 它將每個更新操作拆分成刪除和插入操作。 Split 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Spool |
Spool 運算符將中間查詢結果保存到 tempdb 數據庫中。 |
||
|
Stream Aggregate |
Stream Aggregate 運算符按一列或多列對行分組,然后計算由查詢返回的一個或多個聚合表達式。 此運算符的輸出可供查詢中的后續運算符引用和/或返回到客戶端。 Stream Aggregate 運算符要求輸入在組中按列進行排序。 如果由於前面的 Sort 運算符或已排序的索引查找或掃描導致數據尚未排序,則優化器將在此運算符前面使用一個 Sort 運算符。 在 SHOWPLAN_ALL 語句或 SQL Server Management Studio 的圖形執行計划中,GROUP BY 謂詞中的列會列在 Argument 列中,而聚合表達式列在 Defined Values 列中。 Stream Aggregate 是一個物理運算符。 |
||
|
Switch |
Switch 是一種特殊類型的串聯迭代器,它具有 n 個輸入。 有一個表達式與每個 Switch 運算符關聯。 根據表達式的返回值(在 0 到 n-1 之間),Switch 將適當的輸入流復制到輸出流。 Switch 的一種用途是與某些運算符(如 TOP 運算符)一起實現涉及快進游標的查詢計划。Switch 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Table Delete |
Table Delete 物理運算符刪除查詢執行計划的 Argument 列中所指定表中的行。 |
||
|
Table Insert |
Table Insert 運算符將輸入的行插入到在查詢執行計划的 Argument 列指定的表中。 Argument 列還包含一個 SET:() 謂詞,用於指示為每一列設置的值。 如果 Table Insert 的插入值沒有子項,插入的行則來自 Insert 運算符本身。 Table Insert 是一個物理運算符。 |
||
|
Table Merge |
Table Merge 運算符可將合並數據流應用到堆。 該運算符可在其 Argument 列中所指定的表中刪除、更新或插入行。 執行的實際操作取決於該運算符的 Argument 列中指定的 ACTION 列的運行時值。 Table Merge 是一個物理運算符。 |
||
|
Table Scan |
Table Scan 運算符從查詢執行計划的 Argument 列所指定的表中檢索所有行。 如果 WHERE:() 謂詞出現在 Argument 列中,則僅返回滿足此謂詞的那些行。 Table Scan 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Table Spool |
Table Spool 運算符掃描輸入,並將各行的一個副本放入隱藏的假脫機表中,此表存儲在 tempdb 數據庫中並且僅在查詢的生存期內存在。如果重繞該運算符(例如通過 Nested Loops 運算符重繞),但不需要任何重新綁定,則將使用假脫機數據,而不用重新掃描輸入。 Table Spool 是一個物理運算符。 |
||
|
Table Update |
Table Update 物理運算符更新查詢執行計划的 Argument 列中所指定表中的輸入行。 SET:() 謂詞確定每個更新列的值。 可以在 SET 子句中、此運算符內的其他位置以及此查詢內的其他位置引用這些值。 |
||
|
Table-valued Function |
Table-valued Function 運算符計算表值函數(Transact-SQL 或 CLR)並將結果行存儲在 tempdb 數據庫中。 當父迭代器請求這些行時,Table-valued Function 將返回 tempdb 中的行。 調用表值函數的查詢生成具有 Table-valued Function 迭代器的查詢計划。 可以使用不同的參數值計算 Table-valued Function:
Table-valued Function 既是一個邏輯運算符,也是一個物理運算符。 |
||
|
Top |
Top 運算符掃描輸入,但僅基於排序順序返回最前面的指定行數或行百分比。 Argument 列可以包含要檢查重復值的列的列表。 在更新計划中,Top 運算符用於強制實施行計數限制。 Top 既是一個邏輯運算符,也是一個物理運算符。 Top 既是一個邏輯運算符,也是一個物理運算符。 |
||
無 |
Top N Sort |
Top N Sort 與 Sort 迭代器類似,差別僅在於前者需要前 N 行,而不是整個結果集。 如果 N 的值較小,SQL Server 查詢執行引擎將嘗試在內存中執行整個排序操作。 如果 N 的值較大,查詢執行引擎將使用更通用的排序方法(該方法不采用 N 作為參數)重新排序。 |
||
|
UDX |
擴展運算符 (UDX) 可以實現 SQL Server 中的一種 XQuery 或 XPath 操作。 所有 UDX 運算符既是邏輯運算符,又是物理運算符。 擴展運算符 (UDX) FOR XML 用於將其輸入的關系行集序列化為 XML 表示形式,並以單個輸出行、單個 BLOB 列的形式存儲。 它是區分順序的 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 更新 XML 類型的 modify() 方法中 XQuery 替換數據修改擴展的 XML 節點。 |
||
無 |
Union |
Union 運算符掃描多個輸入,輸出掃描的每一行並刪除重復項。 Union 是一個邏輯運算符。 |
||
|
Update |
Update 運算符更新在查詢執行計划的 Argument 列中所指定對象中的每一輸入行。 Update 是一個邏輯運算符。 物理運算符為 Table Update、Index Update 或 Clustered Index Update。 |
||
|
While |
While 運算符實現 Transact-SQL while 循環。 While 是一個語言元素。 |
||
|
Window Spool |
Window Spool 運算符將每個行擴展為表示與行關聯的窗口的行集。 在查詢中,OVER 子句定義查詢結果集內的窗口和窗口函數,然后計算窗口中的每個行的值。 Window Spool 既是一個邏輯運算符,也是一個物理運算符。 |