存儲(chǔ)過(guò)程是一組為了完成特定功能的 SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象。
存儲(chǔ)過(guò)程優(yōu)化思路:
盡量利用一些 sql 語(yǔ)句來(lái)替代一些小循環(huán),例如聚合函數(shù),求平均函數(shù)等。
中間結(jié)果存放于臨時(shí)表,加索引。
少使用游標(biāo)。sql 是個(gè)集合語(yǔ)言,對(duì)于集合運(yùn)算具有較高性能。而 cursors 是過(guò)程運(yùn)算。比如對(duì)一個(gè) 100 萬(wàn)行的數(shù)據(jù)進(jìn)行查詢。游標(biāo)需要讀表 100 萬(wàn)次,而不使用游標(biāo)則只需要少量幾次讀取。
事務(wù)越短越好。sqlserver 支持并發(fā)操作。如果事務(wù)過(guò)多過(guò)長(zhǎng),或者隔離級(jí)別過(guò)高,都會(huì)造成并發(fā)操作的阻塞,死鎖。導(dǎo)致查詢極慢,cpu 占用率極地。
使用 try-catch 處理錯(cuò)誤異常。
查找語(yǔ)句盡量不要放在循環(huán)內(nèi)。