首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 SELECT 語句優化三板斧:STATISTICS IO、TIME 與 SHOWPLAN 實戰指南

     編輯:關於SqlServer

微軟官方三大調優工具

  1. SET STATISTICS IO ON — 監測真實 I/O 活動
  2. SET STATISTICS TIME ON — 監測執行耗時
  3. SET SHOWPLAN_ALL ON / SET SHOWPLAN_TEXT ON — 分析查詢計劃 (不執行)

注意:STATISTICS IO/TIME 需實際執行;SHOWPLAN 僅編譯不執行,不可與 NOEXEC 共用。

實戰案例:Northwind.Employees 表行數統計

1. STATISTICS IO 輸出解讀

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
  • Scan count:掃描/查找啟動次數
  • Logical reads:從緩存讀取頁數 (核心指標,直接反映查詢效率)
  • Physical reads:從磁盤讀取頁數 (冷啟動/緩存壓力大時非零)
  • Read-ahead reads:預讀頁數 (大掃描時優化器預判發起)

2. sp_spaceused 對比驗證

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),無預讀活動。查詢已近乎最優,無需進一步調優。

3. STATISTICS TIME 輸出

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

編譯/執行耗時極低,確認無計劃重編譯開銷。

4. SHOWPLAN_TEXT 輸出 (不執行)

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)工具提示、缺失索引建議、並行分佈

避坑提醒

  • 邏輯讀 ≠ 物理 I/O,但強相關;優化目標首降邏輯讀
  • SET STATISTICS IO 會輸出到「消息」標籤,非結果集
  • 大結果集查詢 STATISTICS TIME 受網絡傳輸干擾,關注 CPU 時間
  • SHOWPLAN 估計基於統計信息,統計過期時估計不可信
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved