優化儲存過程的7中方法

2022-08-02 21:45:08 字數 1438 閱讀 4927

優化儲存過程有很多種方法,下面介紹最常用的7種。

1.使用set nocount on選項

我們使用select語句時,除了返回對應的結果集外,還會返回相應的影響行數。使用set nocount on後,除了資料集就不會返回額外的資訊了,減小網路流量。

2.使用確定的schema

在使用表,儲存過程,函式等等時,最好加上確定的schema。這樣可以使sql server直接找到對應目標,避免去計畫快取中搜尋。而且搜尋會導致編譯鎖定,最終影響效能。比如select * from dbo.testtable比select * from testtable要好。from testtable會在當前schema下搜尋,如果沒有,再去dbo下面搜尋,影響效能。而且如果你的表是csdn.testtable的話,那麼select * from testtable會直接報找不到表的錯誤。所以寫上具體的schema也是乙個好習慣。

3.自定義儲存過程不要以sp_開頭

因為以sp_開頭的儲存過程預設為系統儲存過程,所以首先會去master庫中找,然後在當前資料庫找。建議使用usp_或者其他標識開頭。

4.使用sp_executesql替代exec

原因在inside microsoft sql server 2005 t-sql programming書中的第四章dynamic sql裡面有具體描述。這裡只是簡單說明一下:sp_executesql可以使用引數化,從而可以重用執行計畫。exec就是純拼sql語句。

5.少使用游標

可以參考inside microsoft sql server 2005 t-sql programming書中的第三章cursors裡面有具體描述。總體來說,sql是個集合語言,對於集合運算具有較高的效能,而cursors是過程運算。比如對乙個100萬行的資料進行查詢,游標需要讀表100萬次,而不使用游標只需要少量幾次讀取。

6.事務越短越好

sql server支援併發操作。如果事務過多過長,或是隔離級別過高,都會造成併發操作的阻塞,死鎖。此時現象是查詢極慢,同時cup佔用率極低。

7.使用try-catch來處理錯誤異常

sql server 2005及以上版本提供對try-catch的支援,語法為:

begin try  

----your code 

end try 

begin catch 

--error dispose 

end catch

一般情況可以將try-catch同事務結合在一起使用。

begin try 

begin tran 

--select 

--update 

--delete 

--………… 

commit 

end try 

begin catch 

--if error 

rollback 

end catch

優化儲存過程7種方法

優化儲存過程有很多種方法,下面介紹最常用的7種。1.使用set nocount on選項 我們使用select語句時,除了返回對應的結果集外,還會返回相應的影響行數。使用set nocount on後,除了資料集就不會返回額外的資訊了,減小網路流量。2.使用確定的schema 在使用表,儲存過程,函...

優化儲存過程的基本方法

本人才疏學淺,大牛請繞道!有不足的地方望糾正,望填補,大家互相進步!言歸正傳,優化儲存過程有很多種方法,大家一起看看和討論下 1,盡量利用一些sql語句來替代一些小迴圈,例如聚合函式,求平均函式等。2,不再按照演算法描述,以致將一條長達100多個欄位的紀錄分90次來更新,而是採用拼湊語句,將更新語句...

PHP7中方法的棄用

php7與資料庫連線建立函式方法呼叫 function fun conn sql 呼叫時 sql 查詢語句 result fun conn sql 可使用函式獲取查詢結果並儲存為陣列形式 arry mysqli fetch assoc result 如果需要顯示查詢結果,只需迴圈輸出顯示陣列 arr...