核心心法:深入了解你的工具
花一個週末瀏覽所有 T-SQL 指令。不需背誦,但遇到問題時能想起「有指令能解決」,再查 MSDN 語法。這是本文最關鍵的一點。
十大實戰原則
- 拒絕游標: 游標佔用記憶體、鎖定資料表、速度極慢、使 DBA 優化失效。一次
FETCH 等於一次 SELECT,10,000 筆就是 10,000 次 SELECT。改用集合式 SELECT/UPDATE/DELETE。曾將 40 分鐘游標存儲程序重寫為 10 秒集合式版本。
- 正規化資料表: 不正規化的藉口只有效能與懶惰。DBMS 設計處理正規化資料,反正規化常讓系統更慢。先按正規化設計。
- 禁用
SELECT *: 指定欄位可減少記憶體/頻寬、提升安全性、讓優化器利用覆蓋索引。
- 掌握資料操作模式再建索引: 索引加速 SELECT 但拖慢 INSERT/DELETE。關鍵在於「你對這張表要做什麼操作」。
- 別給「性別」欄位建索引: 索引是依標準切分資料表。性別只切男/女,百萬筆資料毫無意義。索引維護有成本。依欄位基數(不同值數量)由高到低排序建索引(如 姓名 > 縣市 > 性別)。
- 善用交易: 特別是耗時查詢。系統異常時交易能救命。經驗豐富開發者深知不可預期狀況會讓存儲程序崩潰。
- (其餘原則涵蓋:避免過度正規化、資料驅動設計、時間戳記、角色實體模式等,詳見原文)