示例:算法
一、若是select * 一般狀況下彙集索引會比非彙集索引更優。sql
二、若是出現Nested Loops,須要查下是否須要彙集索引,非彙集索引是否能夠包含全部須要的列。oop
三、Hash Match鏈接操做更適合於須要作Hashing算法集合很小的鏈接。性能
四、Merge Join時須要檢查下原有的集合是否已經有排序,若是沒有排序,使用索引可否解決。優化
五、出現表掃描,彙集索引掃描,非彙集索引掃描時,考慮語句是否能夠加where限制,select * 是否能夠去除沒必要要的列。線程
六、出現Rid查找時,是否能夠加索引優化解決。排序
七、在計劃中看到不是你想要的索引時,看可否在語句中強制使用你想用的索引解決問題,強制使用索引的辦法Select CluName1,CluName2 from Table with(index=IndexName)。索引
八、看到不是你想要的鏈接算法時,嘗試強制使用你想要的算法解決問題。強制使用鏈接算法的語句:select * from t1 left join t2 on t1.id=t2.id option(Hash/Loop/Merge Join)hash
九、看到不是你想要的聚合算法是,嘗試強制使用你想要的聚合算法。強制使用聚合算法的語句示例:select age ,count(age) as cnt from t1 group by age option(order/hash group)it
十、看到不是你想要的解析執行順序是,或這解析順序耗時過大時,嘗試強制使用你定的執行順序。option(force order)
十一、看到有多個線程來合併執行你的sql語句而影響到性能時,嘗試強制是不併行操做。option(maxdop 1)
十二、在存儲過程當中,因爲參數不一樣致使執行計劃不一樣,也影響啦性能時嘗試指定參數來優化。option(optiomize for(@name='zlh'))
1三、不操做多餘的列,多餘的行,不作務必要的聚合,排序。