一、SQL的(de)使用(yòng)規範:
1、盡量避免大(dà)事務操作,慎用(yòng)holdlock子句,提高(gāo)系統并發能力。
2、盡量避免反複訪問同一張或幾張表,尤其是數據量較大(dà)的(de)表,可(kě)以考慮先根據條件提取數據到臨時(shí)表中,然後再做(zuò)連接。
3、盡量避免使用(yòng)遊标,因爲遊标的(de)效率較差,如果遊标操作的(de)數據超過1萬行,那麽就應該改寫;如果使用(yòng)了(le)遊标,就要盡量避免在遊标循環中再進行表連接的(de)操作。
4、注意where字句寫法,必須考慮語句順序,應該根據索引順序、範圍大(dà)小來(lái)确定條件子句的(de)前後順序,盡可(kě)能的(de)讓字段順序與索引順序相一緻,範圍從大(dà)到小。
5、不要在where子句中的(de)“=”左邊進行函數、算(suàn)術運算(suàn)或其他(tā)表達式運算(suàn),否則系統将可(kě)能無法正确使用(yòng)索引。
6、盡量使用(yòng)exists代替select count(1)來(lái)判斷是否存在記錄,count函數隻有在統計表中所有行數時(shí)使用(yòng),而且count(1)比count(*)更有效率。
7、盡量使用(yòng)“>=”,不要使用(yòng)“>”。
8、注意一些or子句和(hé)union子句之間的(de)替換
9、注意表之間連接的(de)數據類型,避免不同類型數據之間的(de)連接。
10、注意存儲過程中參數和(hé)數據類型的(de)關系。
11、注意insert、update操作的(de)數據量,防止與其他(tā)應用(yòng)沖突。如果數據量超過200個(gè)數據頁面(400k),那麽系統将會進行鎖升級,頁級鎖會升級成表級鎖。
二、索引的(de)使用(yòng)規範:
1、索引的(de)創建要與應用(yòng)結合考慮,建議(yì)大(dà)的(de)OLTP表不要超過6個(gè)索引。
2、盡可(kě)能的(de)使用(yòng)索引字段作爲查詢條件,尤其是聚簇索引,必要時(shí)可(kě)以通(tōng)過index index_name來(lái)強制指定索引
3、避免對(duì)大(dà)表查詢時(shí)進行table scan,必要時(shí)考慮新建索引。
4、在使用(yòng)索引字段作爲條件時(shí),如果該索引是聯合索引,那麽必須使用(yòng)到該索引中的(de)第一個(gè)字段作爲條件時(shí)才能保證系統使用(yòng)該索引,否則該索引将不會被使用(yòng)。
5、要注意索引的(de)維護,周期性重建索引,重新編譯存儲過程。
三、tempdb的(de)使用(yòng)規範:
1、盡量避免使用(yòng)distinct、order by、group by、having、join、cumpute,因爲這(zhè)些語句會加重tempdb的(de)負擔。
2、避免頻(pín)繁創建和(hé)删除臨時(shí)表,減少系統表資源的(de)消耗。
3、在新建臨時(shí)表時(shí),如果一次性插入數據量很大(dà),那麽可(kě)以使用(yòng)select into代替create table,避免log,提高(gāo)速度;如果數據量不大(dà),爲了(le)緩和(hé)系統表的(de)資源,建議(yì)先create table,然後insert。
4、如果臨時(shí)表的(de)數據量較大(dà),需要建立索引,那麽應該将創建臨時(shí)表和(hé)建立索引的(de)過程放在單獨一個(gè)子存儲過程中,這(zhè)樣才能保證系統能夠很好的(de)使用(yòng)到該臨時(shí)表的(de)索引。
5、如果使用(yòng)到了(le)臨時(shí)表,在存儲過程的(de)最後務必将所有的(de)臨時(shí)表顯式删除,先truncate table,然後drop table,這(zhè)樣可(kě)以避免系統表的(de)較長(cháng)時(shí)間鎖定。
6、慎用(yòng)大(dà)的(de)臨時(shí)表與其他(tā)大(dà)表的(de)連接查詢和(hé)修改,減低系統表負擔,因爲這(zhè)種操作會在一條語句中多(duō)次使用(yòng)tempdb的(de)系統表。
四、合理(lǐ)的(de)算(suàn)法使用(yòng):
根據上面已提到的(de)SQL優化(huà)技術和(hé)ASE Tuning手冊中的(de)SQL優化(huà)内容,結合實際應用(yòng),采用(yòng)多(duō)種算(suàn)法進行比較,以獲得(de)消耗資源最少、效率最高(gāo)的(de)方法。具體可(kě)用(yòng)ASE調優命令:set statistics io on, set statistics time on , set showplan on 等。