背景
複雜業務邏輯封裝於存儲過程(SP),無規範導致維護難、大SP難讀、性能差。優化後SP效率可達未優化數百倍。
開發規範
- 跨庫引用必建View:禁用
database.dbo.table直連,sp_depends無法追蹤依賴
- 提交前必跑
SET SHOWPLAN ON:分析查詢計劃,自查優化
SQL寫法優化要點
- 避免大事務、慎用HOLDLOCK:提升併發
- 減少重複訪問大表:先按條件導入臨時表再連接
- 盡量不用游標:>1萬行必改寫;用游標避免循環中再連表
- WHERE條件順序:按索引順序、選擇性從高到低排列
- WHERE左邊禁運算:
col+1=@val導致索引失效,改col=@val-1
- 存在性判斷用EXISTS:替代
SELECT COUNT(1);COUNT(1)優於COUNT(*)
- 優先
>=不用>:邊界包含利於索引求區間
- OR/UNION互換評估:視索引情況選擇
- 連接欄位類型一致:隱式轉換殺索引
- 參數類型與表欄位對齊
- 單次INSERT/UPDATE超200頁(400KB)觸發鎖升級:頁鎖→表鎖,拆批次
索引規範
- 大OLTP表索引≤6個,結合業務建立
- 優先用索引列作查詢條件,尤其聚簇索引
- 必要時
INDEX(index_name)強制指定
核心理念
「規範先行、計劃驗證、小事務、無游標、索引對齊、類型一致、拆大批次。」