SET STATISTICS IO ON — 監測真實 I/O 活動SET STATISTICS TIME ON — 監測執行耗時SET SHOWPLAN_ALL ON / SET SHOWPLAN_TEXT ON — 分析查詢計劃 (不執行)注意:STATISTICS IO/TIME 需實際執行;SHOWPLAN 僅編譯不執行,不可與 NOEXEC 共用。
SET STATISTICS IO ON
SELECT COUNT(*) FROM Employees
SET STATISTICS IO OFF
-- 輸出
Table 'Employees'. Scan count 1,
logical reads 53, physical reads 0, read-ahead reads 0
EXEC sp_spaceused Employees
-- name rows reserved data index_size unused
-- Employees 2977 2008 KB 1504 KB 448 KB 56 KB
洞察:表數據 1.5MB,僅 53 個邏輯讀 (424KB) 獲取結果 → 優化器選擇了窄索引掃描而非表掃描。索引頁已在緩存 (Physical=0),無預讀活動。查詢已近乎最優,無需進一步調優。
SET STATISTICS TIME ON
SELECT COUNT(*) FROM Employees
-- SQL Server parse and compile time: CPU 0 ms, elapsed 1 ms
-- SQL Server execution time: CPU 0 ms, elapsed 2 ms
編譯/執行耗時極低,確認無計劃重編譯開銷。
SET SHOWPLAN_TEXT ON
SELECT COUNT(*) FROM Employees
SET SHOWPLAN_TEXT OFF
-- 輸出片段
|--Compute Scalar(DEFINE:([Expr1003]=Convert(...)))
|--Stream Aggregate(DEFINE:([Expr1004]=Count(*)))
|--Index Scan(OBJECT:([Northwind].[dbo].[Employees].[IndexName]))
計劃確認:Index Scan → Stream Aggregate → Compute Scalar,無書簽查找、無排序、無並行,極簡高效。
| 場景 | 工具組合 | 關注點 |
|---|---|---|
| 新寫 SQL 基線 | IO + TIME + PLAN | 邏輯讀、耗時、計劃形狀 |
| 對比改寫前後 | IO (重點) + TIME | 邏輯讀降幅、CPU/耗時變化 |
| 生產慢查詢複現 | IO + TIME (帶參數) | 實際參數下的資源消耗 |
| 無執行權限環境 | SHOWPLAN 系列 | 估計計劃、估計行/成本 |
| 圖形化分析 | SSMS "顯示估計執行計劃" (Ctrl+L) / "包含實際執行計劃" (Ctrl+M) | 工具提示、缺失索引建議、並行分佈 |
SET STATISTICS IO 會輸出到「消息」標籤,非結果集STATISTICS TIME 受網絡傳輸干擾,關注 CPU 時間SHOWPLAN 估計基於統計信息,統計過期時估計不可信