索引視圖能將彙總查詢從「全表掃描」降級為「索引尋找」,但每次基表 INSERT/UPDATE/DELETE 都需同步維護視圖索引,增加寫入負擔。本文說明如何科學評估「得大於失」。
| 場景特徵 | 建議 |
|---|---|
| 讀多寫少、彙總查詢頻繁、資料量大(>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 消除碎片。