優化儲存過程有很多種方法,下面介紹最常用的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
SQL Server 優化儲存過程的七種方法
原文 sql server 優化儲存過程的七種方法 優化儲存過程有很多種方法,下面介紹最常用的7種。1.使用set nocount on選項 我們使用select語句時,除了返回對應的結果集外,還會返回相應的影響行數。使用set nocount on後,除了資料集就不會返回額外的資訊了,減小網路流量...
SQL Server 優化儲存過程的七種方法
優化儲存過程有很多種方法,下面介紹最常用的7種。1.使用set nocount on選項 我們使用select語句時,除了返回對應的結果集外,還會返回相應的影響行數。使用set nocount on後,除了資料集就不會返回額外的資訊了,減小網路流量。2.使用確定的schema 在使用表,儲存過程,函...
sql查詢優化7種方法
如何盡可能利用上索引 先where以後再關聯 減少關聯的資料量 子查詢盡量不要放在被驅動表,有可能使用不到索引 left join時,盡量讓實體表作為被驅動表。能夠直接多表關聯的盡量直接關聯,不用子查詢 頻繁作為查詢條件的字段應該建立索引 where 查詢中與其它表關聯的字段,外來鍵關係建立索引 關...