vi
盡量使用exists代替select count(
)來判斷是否存在記錄
count函數只有在統計表中所有行數時使用
而且count(
)比count(*)更有效率
vii 盡量使用>=不要使用>
viii 注意一些or子句和union子句之間的替換
ix 注意表之間連接的數據類型避免不同類型數據之間的連接
x 注意存儲過程中參數和數據類型的關系
xi 注意insertupdate操作的數據量防止與其他應用沖突如果數據量超過個數據頁面(k)那麼系統將會進行鎖升級頁級鎖會升級成表級鎖
b)索引的使用規范
i 索引的創建要與應用結合考慮建議大的OLTP表不要超過個索引
ii 盡可能的使用索引字段作為查詢條件尤其是聚簇索引必要時可以通過index index_name來強制指定索引
iii 避免對大表查詢時進行table scan必要時考慮新建索引
iv 在使用索引字段作為條件時如果該索引是聯合索引那麼必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引否則該索引將不會被使用
v 要注意索引的維護周期性重建索引重新編譯存儲過程
c)tempdb的使用規范
i 盡量避免使用distinctorder bygroup byhavingjoincumpute因為這些語句會加重tempdb的負擔
ii 避免頻繁創建和刪除臨時表減少系統表資源的消耗
iii 在新建臨時表時如果一次性插入數據量很大那麼可以使用select into代替create table避免log提高速度如果數據量不大為了緩和系統表的資源建議先create table然後insert
iv 如果臨時表的數據量較大需要建立索引那麼應該將創建臨時表和建立索引的過程放在單獨一個子存儲過程中這樣才能保證系統能夠很好的使用到該臨時表的索引
v 如果使用到了臨時表在存儲過程的最後務必將所有的臨時表顯式刪除先truncate table然後drop table這樣可以避免系統表的較長時間鎖定
vi 慎用大的臨時表與其他大表的連接查詢和修改減低系統表負擔因為這種操作會在一條語句中多次使用tempdb的系統表
d)合理的算法使用
根據上面已提到的SQL優化技術和ASE Tuning手冊中的SQL優化內容結合實際應用采用多種算法進行比較以獲得消耗資源最少效率最高的方法具體可用ASE調優命令set statistics io on set statistics time on set showplan on 等
[] []
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22373.html