SQL SERVER 执行计划各字段注释
SET SHOWPLAN_ALL
使 Microsoft? SQL Server? 不執行 Transact-SQL 語句。相反,SQL Server 返回有關語句執行方式和語句預計所需資源的詳細信息。
語法
SET SHOWPLAN_ALL { ON | OFF }
注釋
SET SHOWPLAN_ALL 的設置是在執行或運行時設置,而不是在分析時設置。
當 SET SHOWPLAN_ALL 為 ON 時,SQL Server 返回每個語句的執行信息但不執行語句,而且 Transact-SQL 語句將不執行。將該選項設置為 ON 后,將返回有關所有后續 Transact-SQL 語句的信息,直到將該選項設置為 OFF 為止。例如,如果在 SET SHOWPLAN_ALL 為 ON 時執行 CREATE TABLE 語句,則 SQL Server 從涉及同一個表的后續 SELECT 語句返回錯誤信息;指定的表不存在。因此,對該表的后續引用將失敗。當 SET SHOWPLAN_ALL 為 OFF 時,SQL Server 執行語句但不生成報表。
SET SHOWPLAN_ALL 是供為處理其輸出而編寫的應用程序使用的。使用 SET SHOWPLAN_TEXT 返回可由 Microsoft MS-DOS? 應用程序(如 osql 實用工具)讀取的輸出。
在存儲過程內不能指定 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL,它們必須是批處理中的語句。
SET SHOWPLAN_ALL 將信息作為行集返回,行集形成一個層次結構樹,用以表示 SQL Server 查詢處理器在執行每個語句時所采取的步驟。輸出中反映的每個語句都包含一個含有語句文本的行,后面跟有幾個含有執行步驟詳細信息的行。下表顯示輸出中包含的列。
| StmtText | 對于不是 PLAN_ROW 類型的行,該列包含 Transact-SQL 語句的文本。對于 PLAN_ROW 類型的行,該列包含對操作的描述。該列包含物理運算符,也可以選擇包含邏輯運算符。該列還可以跟有由物理運算符決定的描述。有關更多信息,請參見邏輯運算符和物理運算符。 | 
| StmtId | 當前批處理中的語句數。 | 
| NodeId | 當前查詢內的節點 ID。 | 
| Parent | 上一級步驟的節點 ID。 | 
| PhysicalOp | 節點的物理實現算法。僅限于 PLAN_ROWS 類型的行。 | 
| LogicalOp | 該節點表示的關系代數運算符。僅限于 PLAN_ROWS 類型的行。 | 
| Argument | 提供有關所執行操作的輔助信息。該列的內容取決于物理運算符。 | 
| DefinedValues | 包含該運算符所引入值的用逗號分隔的列表。這些值可以是出現在當前查詢(例如,在 SELECT 列表或 WHERE 子句中)內的計算表達式,或者是由查詢處理器為處理該查詢而引入的內部值。以后在該查詢內的任何其它地方都可以引用這些定義的值。僅限于 PLAN_ROWS 類型的行。 | 
| EstimateRows | 由該運算符輸出的預計行數。僅限于 PLAN_ROWS 類型的行。 | 
| EstimateIO | 該運算符的預計 I/O 成本。僅限于 PLAN_ROWS 類型的行。 | 
| EstimateCPU | 該運算符的預計 CPU 成本。僅限于 PLAN_ROWS 類型的行。 | 
| AvgRowSize | 正通過該運算符傳遞的行的預計平均行大小(以字節為單位)。 | 
| TotalSubtreeCost | 該操作和所有下一級操作的預計(累積)成本。 | 
| OutputList | 包含當前操作所計劃的列的用逗號分隔的列表。 | 
| Warnings | 包含與當前操作相關的警告信息的用逗號分隔的列表。警告信息可以在列的列表中包含字符串"NO STATS:()"。該警告信息表示查詢優化器曾嘗試根據該列的統計做決策,但沒有可用的統計。因此,查詢優化器不得不進行推測,這可能已導致選擇低效的查詢計劃。有關創建或更新列統計(這些統計有助于查詢優化器選擇更高效的查詢計劃)的更多信息,請參見 UPDATE STATISTICS。該列可以選擇包含字符串"MISSING JOIN PREDICATE",這表示正在進行的聯接(與表有關)未使用聯接謂詞。意外地除去聯接謂詞可能導致查詢的時間比預期長得多,并返回巨大的結果集。如果出現該警告,請驗證是否有意除去了聯接謂詞。 | 
| Type | 節點類型。對于每個查詢的父節點,這是 Transact-SQL 語句類型(如 SELECT、INSERT、EXECUTE 等)。對于表示執行計劃的子節點,這是 PLAN_ROW 類型。 | 
| Parallel | 0 = 運算符沒有以并行方式運行。 1 = 運算符正在以并行方式運行。 | 
| EstimateExecutions | 該運算符預計在當前查詢運行期間將執行的次數。 | 
權限
SET SHOWPLAN_ALL 權限默認授予所有用戶。
示例
下面兩個語句使用 SET SHOWPLAN_ALL 設置,顯示 SQL Server 在查詢內對索引的使用進行分析和優化的方法。
第一個查詢在索引列上的 WHERE 子句中使用等于比較運算符 (=)。這在 LogicalOp 列內產生聚集索引查找值,在 Argument 列內產生索引名。
第二個查詢在 WHERE 子句中使用 LIKE 運算符。這將強制 SQL Server 使用聚集索引掃描并查找滿足 WHERE 子句條件的數據。這在含有 Argument 列內索引名的 LogicalOp 列內產生聚集索引掃描值,在含有 Argument 列內 WHERE 子句條件的 LogicalOp 列內產生篩選值。
EstimateRows 和 TotalSubtreeCost 列內用于第一個基于索引的查詢的值較小,這表示與非索引查詢相比,該查詢的處理速度快得多且使用更少的資源。
USE pubs GO SET SHOWPLAN_ALL ON GO -- First query. SELECT au_id FROM authors WHERE au_id = '409-56-7008' GO -- Second query. SELECT city FROM authors WHERE city LIKE 'San%' GO SET SHOWPLAN_ALL OFF GO總結
以上是生活随笔為你收集整理的SQL SERVER 执行计划各字段注释的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 文档中没有介绍的SQL Server D
- 下一篇: 几篇关于Hadoop+Hive数据仓库的
