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