SQL Server 優化儲存過程的七種方法

2021-09-21 23:19:09 字數 1438 閱讀 6911

優化儲存過程有很多種方法,下面介紹最常用的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

(4 26)sql server儲存過程優化

此部落格介紹了簡單但有用的提示和優化,以提高儲存過程的效能。exec uspgetsalesinfofordaterange 1 1 2009 31 12 2009 with recompile sql server在執行select或dml操作時返回資訊性訊息。如果乙個過程有許多這樣的語句,游標或...

sql Server 常用儲存過程的優化

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

sql server儲存過程

建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...