[SQL SERVER]撰寫Stored Procedure小細節
[SQL SERVER][Memo]撰寫Stored Procedure小細節
這篇筆記一下Stored Procedure有那些小細節,也順便提醒自己。
1.不要忘記 set nocount on:
SQL Server會針對每個Select 和 DML 回傳訊息給用戶端,
當有設定 nocount on時就可以關閉SQL Server 回傳訊息的行為,
這樣對效能會有不錯的改善,因為網路的傳輸量會降低不少。
2.如果查詢陳述句太過複雜,請使用SP:
如果你的商業邏輯複雜導致查詢陳述句過長又龐大,
建議可以使用SP來撰寫,因為用戶端(client)只會傳SP Name給SQL Server(而不是一長串的TSQL),
所以網路的傳輸量也會降低不少。
3.請使用兩節式命名:
相關的物件請都使用兩節式(schema name+object name)命名,
因為這可以直接且明確找到該物件和編譯過的執行計畫,
而省下搜尋其他schema底下可能的object所浪費的資源和時間。
4.stored procedure命名勿使用 sp_ 開頭: 如果stored procedure使用sp_開頭,那SQL Server 會先搜尋master database完後, 在搜尋現階段連線的database,
這不僅讓費時間和資源,也增加出錯的機率(如果master database有相同的stroed procedure名稱)
5.如果你要執行字串,請使用sp_executesql取代Execute(Exec) 陳述式
(擷取線上叢書..我太懶了XD),下面附上測試過程。
使用sp_executesql
參數:1和2
參數:5和6
結果:我在SSMS查詢視窗中執行 sp_executesql 總共4次查詢,
可以看到只產生一個執行計畫且重複使用該執行計畫。
使用exec(Execute)
參數:1和2
參數:5和6
結果:我在SSMS查詢視窗中執行 exec 總共4次查詢,可以看到產生4個執行計畫且個別使用次數為1次。
當然!這裡我只是提個大概,因為開發上還是有許多要注意的地方,
例如盡量少使用Cursor,交易處理時請盡量縮短交易…等。
Last updated