首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

預存程序開發經驗與效能優化完整指南(針對 Sybase / SQL Server)

     編輯:關於SqlServer

前言

長期從事預存程序 (SP) 開發,整理出一套開發規範與優化原則,主要針對 Sybase 與 SQL Server,其他關聯式資料庫亦具參考價值。優化前後效能差距可達數百倍。

開發規範

  1. 跨庫存取必須建立 View:禁止直接使用 database.dbo.table_name,因 sp_depends 無法追蹤跨庫相依,影響驗證。
  2. 提交前必須執行 SET SHOWPLAN ON 分析查詢計劃,自行完成查詢優化檢查。
  3. 程式碼撰寫規範:縮排、註解、命名一致性,降低維護成本。

SQL 撰寫效能準則

項目建議做法避免做法
大型交易拆解為小批次長時間持有鎖、濫用 HOLDLOCK
重複存取大表先依條件篩選進暫存表,再做 JOIN多次直接 JOIN 大表
游標能用集合操作就不用游標;超過 1 萬列必須改寫游標迴圈中再做表連接
WHERE 條件順序依索引順序、選擇性由高到低排列隨意排列、忽略索引順序
WHERE 運算運算放在右側常數左側欄位做函數/運算(導致索引失效)
存在性判斷EXISTSSELECT COUNT(1)(全表掃描)
範圍比較>=>(可能多一次索引搜尋)
OR / UNION視情況互換,配合索引固定寫法不思考
資料型別一致JOIN 欄位型別一致隱含轉換導致索引失效
參數與欄位型別參數型別對應欄位型別不符觸發隱含轉換
大量 DML分批次、避免超過 200 頁 (400KB) 觸發鎖升級單次大量 INSERT/UPDATE

索引使用規範

  • 大型 OLTP 表建議不超過 6 個索引
  • 善用索引欄位作查詢條件,必要時 INDEX index_name 強制指定
  • 避免大表 Table Scan,必要時新增索引
  • 複合索引必須在 WHERE 中使用第一欄位才會被使用
  • 定期重建索引、重新編譯 SP(sp_recompile)

tempdb 使用原則

  • 減少 DISTINCT, ORDER BY, GROUP BY, HAVING, JOIN, COMPUTE 等加重 tempdb 負擔的操作
  • 避免頻繁建立/刪除暫存表,減輕系統表資源消耗
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved