SMALLINT 代替 INT、VARCHAR(20) 代替 VARCHAR(100) → 索引更窄、單頁容納更多列、I/O 更少| 元件 | 建議 | 關鍵指標 |
|---|---|---|
| CPU | 多核心、高主頻;關鍵系統建議 Xeon/EPYC 多插槽 | CPU 佇列長度、編譯/重編譯率 |
| 記憶體 | 越多越好;64 位元突破 4GB 限制;鎖定頁面記憶體 (LPIM) | Page Life Expectancy (>300s)、Buffer Cache Hit Ratio (>99%) |
| 磁碟子系統 | RAID 10 (資料/記錄/TempDB 分離);NVMe/SSD 隨機 IOPS 高 | Avg. Disk Sec/Read/Write (<10ms)、Disk Queue Length |
| 網路 | GbE/10GbE;啟用 Jumbo Frames (9000 MTU) | Network Utilization、TCP 重傳率 |
INCLUDE 欄位避免 Key LookupWHERE Col = @val 而非 WHERE FUNCTION(Col) = @valOPTION (RECOMPILE)、OPTIMIZE FOR UNKNOWN、區域變數賦值sp_executesql + 參數化,重用計畫、防注入| 反模式 | 重構方向 |
|---|---|
| SELECT * | 明確列出欄位,利用覆蓋索引 |
| WHERE Col LIKE '%keyword%' | 全文檢索 / 字首搜尋 / n-gram 索引 |
| 隱含轉換 (VARCHAR 比較 INT) | 統一資料型別、顯式 CAST |
| 標量函數在 WHERE/JOIN | 改為內嵌表值函數 / 直接展開邏輯 |
| 大量 INSERT 逐筆 COMMIT | 批次 INSERT / BULK INSERT / Table-Valued Parameters |
sys.dm_exec_query_stats (Top CPU/IO/Duration)sys.dm_exec_requests (即時阻塞/等待)sys.dm_os_wait_stats (等待類型分析:PAGEIOLATCH、CXPACKET、LCK_M_、WRITELOG)sys.dm_db_index_usage_stats (未使用索引偵測)SQL Server 效能優化是系統工程:**設計奠基、硬體支撐、索引/統計維護、查詢重構、持續監控** 五大支柱缺一不可。建立「基準線 → 異常偵測 → 根因分析 → 驗證修正 → 知識沉澱」閉環,讓資料庫持續在最佳狀態服務業務。