SQL Server Tuning 技巧

  1. 開啟 set statistics io,time,profile on;
  2. 使用兩截式命名(Ex: dbo.Employee)
  3. SARG格式

    • seek:=、>、<、between、部分like(ex:'allen%')、in
    • Not Seek: Like '%A%'、Like '%A' year(c1)=2016、c1+15=115
    • 索引欄位依照選擇性高低擺放(密度*資料比例=>越小越好)
    • 善用索引壓縮(SQL Server 2016)
    • 使用涵蓋索引(避免bookmark lookup發生) =>bookmark lookup 會讓執行計畫不穩定
    • 善用索引合併 原始
       select c1 from indexdemo where c2 = 1 or c3 < 3
      
      改寫:
       select c1 from indexdemo where c2 = 1
       union 
       select c1 from indexdemo with(index(idxc3)) where c3 < 3
      
    • 避免多餘索引
  4. 索引設計技巧

    • WPOC守則Where: 高選擇性
    • Partition: Partition 高於 Order by
    • Order by: 索引鍵順序要和排序依據欄位相同
    • Cover:涵蓋欄位
  5. Null 會產生較差的執行計畫(欄位盡量指定Not Null,及Default Value)
  6. 判斷資料不存在使用not exist,少用 not in
  7. sp_executesql 取代 execute(提高執行計畫重用)
  8. 善用暫存資料表及衍生資料表(CTE)
  9. 執行計畫分析與優化(http://caryhsu.blogspot.tw/2011/06/sql-server.html)
    a.開啟其他資訊:set statistics io,time,profile on;
    b.CBO 為基礎
    c.較低的邏輯讀取
    d.較低整體執行計畫成本
    e.較低CPU時間
    f.評估table或index scan
    多數情況可以使用seek取代  
    
    g.評估bookmarks lookup、RID lookup
    建立涵蓋索引移除lookup
    
    i.評估join類型(Nested Loop join、Merge join、Hash join)
    j.評估order by
    確認索引鍵順序是否與排序欄位順序相同
    
    k.移除篩選(filter)
    通常是索引錯誤不正確
    

results matching ""

    No results matching ""