數據庫設計規范


數據庫相關的開發&優化原則
  1. 為每個數據表創建聚集索引,以及其它必要的索引(根據業務需求識別經常要查詢的字段)
  2. 數據表結構的定義應該優先考慮降低SQL查詢的復雜性
  3. 優先使用唯一索引來保證字段值的不重復性(用異常來識別重復插入)
  4. 可適當增加冗余字段降低查詢的復雜度
  5. WHERE過濾條件要符合SARG原則
  6. 使用參數化查詢,重用執行計划
  7. 共用數據庫連接,避免反復打開。
  8. 盡量使用有序GUID,避免直接使用 newid()
  9. 禁止使用觸發器,禁止使用存儲過程,禁止使用CLR SP
  10. 避免在數據庫中執行較復雜的業務邏輯(SP),或者復雜的數據轉換、計算
  11. 盡量降低SQL語句的復雜性,可適當返回 粗粒度結果讓 應用程序代碼來處理
缺少索引的危害
  1. I/O -> 內存 -> CPU , 壓力全部變大。
  2. 由於需要掃描大量記錄,導致語句運行很慢。
  3. 容易產生大量的鎖,阻塞其它進程,以及被阻塞。
  4. 由於持有過多的鎖,出現死鎖的機率也會變大。
缺少索引的改進建議
  1. 為表指定主鍵
  1. 為外鍵字段創建索引
  2. 為一些重要的查詢條件創建索引
  3. 關注執行計划中高成本的:掃描,聯接,分組,排序。
創建索引的注意事項
  1. 索引不是越多越好,尤其要避免產生冗余索引。
  2. 只為頻繁查詢的參考字段創建索引。
  3. 創建高選擇性的索引(符合條件的行數與總行數之比)。
  4. 索引值不得超過900字節
  5. 不建議創建包含索引(除非那個查詢非常穩定非常重要)
冗余索引的危害
  1. 更新數據的SQL運行更慢,因為要維護索引。
  2. 浪費更多的磁盤資源。
  3. 耗費更多的維護成本。
SARG是什么?
 
  SARG: Searchable Arguments
  搜索參數 (SARG) 可指定精確匹配、
  值的范圍或由 AND 聯接的兩項或多項的連接,因此能夠限制搜索范圍。
 
  SARG格式:
  1. 列 運算符 <常量或變量>
  2. <常量或變量> 運算符 列
  SARG 運算符包括 =、>、<、>=、<=、IN、BETWEEN,
  有時還包括 LIKE(在進行前綴匹配時,如 LIKE ‘Fish%')。
  SARG 可以包括由 AND 聯接的多個條件。
  非 SARG 運算符包括: NOT運算符 、函數調用 和 字段計算表達式。
 
不符合SARG的改進建議
  1. 有函數調用的:去掉函數掉用,調整語句。
  2. 字段計算表達式:將字段與常量分離。
  3. 使用 NOT:調整業務需求,使用一個較小的范圍。
  4. 使用 NOT:根據業務需求,拆分表。
  5. LIKE‘%XXX%’ :調整業務需求,改寫為 LIKE ‘XXX%’


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM