SET STATISTICS XML (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

會使 Microsoft SQL Server 執行 Transact-SQL 陳述式,並以妥善定義的 XML 文件格式來產生陳述式執行狀況的詳細資料。

Transact-SQL 語法慣例

Syntax

  
SET STATISTICS XML { ON | OFF }  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

備註

SET STATISTICS XML 的設定是在執行階段進行設定,而不是在剖析階段進行設定。

當 SET STATISTICS XML 為 ON 時,SQL Server 會在執行每個陳述式之後,傳回其執行資訊。 在這個選項設為 ON 之後,會傳回所有後續 Transact-SQL 陳述式的相關資訊,直到此選項設為 OFF 為止。 請注意,SET STATISTICS XML 不必是批次中的唯一陳述式。

SET STATISTICS XML 會將輸出當作應用程式 (例如 sqlcmd 公用程式) 的 nvarchar(max) 傳回,而後續其他工具會使用 XML 輸出來顯示和處理查詢計畫資訊。

SET STATISTICS XML 會將資訊當作一組 XML 文件傳回。 SET STATISTICS XML ON 陳述式之後的每個陳述式都會反映在單一文件的輸出中。 每份文件都包含陳述式的文字,後面接著執行步驟的詳細資料。 輸出會顯示各種執行階段資訊,如成本、存取的索引、執行的作業類型、聯結順序、實體作業的執行次數、每個實體運算子所產生的資料列數等。

在安裝期間,包含 SET STATISTICS XML 輸出之 XML 的 XML 結構描述的文件,會複製到已安裝 Microsoft SQL Server 之電腦的本機目錄中。 您可以在 SQL Server 安裝檔所在的磁碟機中找到它,位置如下:

\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

也可以在這個網站找到執行程序表結構描述。

SET STATISTICS PROFILE 和 SET STATISTICS XML 彼此是對應的項目。 前者會產生文字輸出;後者會產生 XML 輸出。 在 SQL Server 未來的版本中,新的查詢執行計劃資訊只會透過 SET STATISTICS XML 陳述式顯示,而非 SET STATISTICS PROFILE 陳述式。

注意

如果在 SQL Server Management Studio 中選取了 [包括實際執行計劃],則此 SET 選項不會產生 XML 執行程序表輸出。 在使用這個 SET 選項之前,請清除 [包括實際執行計畫] 按鈕。

權限

若要使用 SET STATISTICS XML 和檢視輸出,使用者必須有下列權限:

  • 用來執行 Transact-SQL 陳述式的適當權限。

  • 所有資料庫上的 SHOWPLAN 權限,這些資料庫包含 Transact-SQL 陳述式所參考的物件。

如果 Transact-SQL 陳述式不會產生 STATISTICS XML 結果集,就只需要執行 Transact-SQL 陳述式的適當權限。 如果 Transact-SQL 陳述式確實會產生 STATISTICS XML 結果集,請務必確認 Transact-SQL 陳述式執行權限和 SHOWPLAN 權限都成功,否則 Transact-SQL 陳述式會中止執行,且不產生任何執行程序表資訊。

範例

隨後的兩個陳述式會使用 SET STATISTICS XML 設定,顯示 SQL Server 分析及最佳化在查詢中使用索引的方法。 第一個查詢在索引資料行的 WHERE 子句中,使用等於 (=) 比較運算子。 第二個查詢在 WHERE 子句中使用 LIKE 運算子。 這會強制 SQL Server 使用叢集索引掃描,尋找符合 WHERE 子句條件的資料。 第一個索引查詢的 EstimateRowsEstimatedTotalSubtreeCost 屬性中的值比較小,這表示它的處理速度比較快,使用的資源比非索引查詢少。

USE AdventureWorks2022;  
GO  
SET STATISTICS XML ON;  
GO  
-- First query.  
SELECT BusinessEntityID   
FROM HumanResources.Employee  
WHERE NationalIDNumber = '509647174';  
GO  
-- Second query.  
SELECT BusinessEntityID, JobTitle   
FROM HumanResources.Employee  
WHERE JobTitle LIKE 'Production%';  
GO  
SET STATISTICS XML OFF;  
GO  

另請參閱

SET SHOWPLAN_XML (Transact-SQL)
sqlcmd 公用程式