本指南旨在協助 DBA 設定 SQL Server 7.0 達到最佳效能,並提供開發人員索引設計與查詢分析的實務技巧。雖版本較舊,但核心原則在現代版本仍具參考價值。
關鍵改進:
DBCC SHOWCONTIG、DBCC INDEXDEFRAG 線上索引碎片整理。sp_configure 'max server memory' 設定上限;min server memory 保證基礎緩衝區。tempdb:獨立磁碟陣列(RAID 1+0),多資料檔(每邏輯 CPU 1 檔),預先擴展。SE_MANAGE_VOLUME_NAME 特權),加速資料檔擴展。DBCC SHOWCONTIG 檢查碎片:Scan Density < 80% 或 Logical Fragmentation > 15% 觸發重建。DBCC INDEXDEFRAG(線上、輕量)適合輕度碎片;DBCC DBREINDEX / ALTER INDEX REBUILD 適合重度碎片。80~90;唯讀/資料倉庫表設 100。AUTO_CREATE_STATISTICS、AUTO_UPDATE_STATISTICS(預設開啟)。UPDATE STATISTICS ... WITH FULLSCAN 或 SAMPLE 50 PERCENT。sp_updatestats 僅更新需更新的統計資料,維護窗口較短時適用。SET SHOWPLAN_ALL ON、SET STATISTICS IO ON、SET STATISTICS TIME ON。SQL:BatchCompleted、SP:StmtCompleted、Showplan XML 事件。.trc),自動推薦索引建立腳本。| 反模式 | 症狀 | 修正方向 |
|---|---|---|
| 隱含轉換 | 索引無法求存、掃描 | 參數/常數型別與欄位一致,避免 WHERE varchar_col = 123 |
| 函數包裹欄位 | WHERE YEAR(date_col) = 2023 導致掃描 | 改寫為 WHERE date_col >= '2023-01-01' AND date_col < '2024-01-01' |
| 過度索引 | INSERT/UPDATE/DELETE 變慢、鎖爭用 | 定期 sys.dm_db_index_usage_stats 檢視未使用索引並移除 |
| 游標/WHILE 迴圈逐列處理 | CPU 高、並發差 | 改為集合式操作、MERGE、CROSS APPLY、資料表值參數 |