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

SQL Server 索引視圖效能優化實戰(二):效能測試與權衡策略

     編輯:關於SqlServer

索引視圖能將彙總查詢從「全表掃描」降級為「索引尋找」,但每次基表 INSERT/UPDATE/DELETE 都需同步維護視圖索引,增加寫入負擔。本文說明如何科學評估「得大於失」。

效能測試四步法

  1. 基準測試:在測試環境部署相同資料量,記錄無索引視圖下核心查詢(如日報表)的平均耗時、CPU、邏輯讀取。
  2. 建立索引視圖:依前篇腳本建立並驗證生效。
  3. 讀取測試:重跑核心查詢,記錄同樣指標,計算提升倍數。
  4. 寫入壓測:模擬生產寫入頻率(如每秒 100 筆訂單),對比有/無索引視圖下的交易延遲、鎖等待、交易記錄增長。

決策矩陣

場景特徵建議
讀多寫少、彙總查詢頻繁、資料量大(>100 萬列)強烈推薦 索引視圖
寫入極高(>1000 TPS)、即時性要求嚴格不推薦,改用彙總表 + 定時重算
中等寫入、需即時彙總小規模試點,若寫入延遲 <5% 可接受則採用
基表結構頻繁變更(加欄、改型別)避免,維護成本極高

替代方案:彙總表 + 定時/觸發器重算

-- 彙總表
CREATE TABLE SalesSummary (
    Product VARCHAR(30) PRIMARY KEY,
    ProductCount BIGINT,
    TotalSales MONEY,
    LastUpdated DATETIME
);

-- 定時作業(每 5 分鐘)
UPDATE s
SET s.ProductCount = src.cnt,
    s.TotalSales = src.sum,
    s.LastUpdated = GETDATE()
FROM SalesSummary s
JOIN (
    SELECT Product, COUNT_BIG(*) cnt, SUM(SalePrice) sum
    FROM SalesHistory
    GROUP BY Product
) src ON s.Product = src.Product;
  • 寫入零負擔,讀取極快(單索引求值)。
  • 資料有秒級~分鐘級延遲,視業務容忍度決定排程頻率。

最佳實踐清單

  • 先做完整效能測試,勿憑直覺上線。
  • 索引視圖欄位越窄越好,僅包含查詢所需欄位。
  • 監控 sys.dm_db_index_usage_stats 確認索引確實被使用。
  • 定期 ALTER INDEX ... REBUILD 消除碎片。
  • 文件化「為何建立、測試數據、回滾方案」,利於團隊傳承。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved