測試sp executesql和exec的效能差別

2021-04-18 10:07:49 字數 3268 閱讀 9998

sp_executesql擴充套件儲存過程與t-sql的execute功能相似,但有一點不同,通過sp_executesql執行的執行計畫會被快取起來,可重複使用。

測試:nz.perfectaction [email protected] 下面

測試sp_executesql和exec的效能差別 create

database t_db go

uset_db go

create

table tb (

id int

identity

(1,1)

primary

key,

name

varchar

(20))go

insert

into tb select

'a'insert

into tb select

'b'insert

into tb select

'c'insert

into tb select

'd'insert

into tb select

'e'insert

into tb select

'f'go --

清除快取中所有元素

dbcc

freeproccache --

檢視t_db

資料庫使用的快取

select

sql as exec_sql,objtype as exec_type,*

from master..syscacheobjects where dbid=

db_id

('t_db'

)and

sql like

'%select * from tb where name%'

and sql not

like

'%syscacheobjects%'

order

by sql

結果為空,

--測試使用

exec,執行下面sql語塊

declare

@sql varchar

(2000)

declare

@name varchar

(20)

declare

@i int

set@i=1

while

@i<=6

begin

if @i=1 set @name=

'a'if @i=2 set @name=

'b'if @i=3 set @name=

'c'

if @i=4 set @name=

'd'if @i=5 set @name=

'e'if @i=6 set @name=

'f'

set @sql =

'select * from tb where name = '''

+@name+

''''

exec

(@sql)

set @i = @i + 1

end--檢視

t_db

資料庫使用的快取

select

sql as exec_sql,objtype as exec_type,*

from master..syscacheobjects where dbid=

db_id

('t_db'

)

andsql like

'%select * from tb where name%'

and sql not

like

'%syscacheobjects%'

order

by sql

結果有六條記錄如圖:

這說明sql

server

對於exec

執行的sql

語句,即使

where

欄位是同乙個,但值不一樣,每次都需要重新編譯,而使用不同的快取。

--測試使用

sp_executesql,執行下面sql語塊

declare

@sql nvarchar

(2000)

declare

@name nvarchar

(20)

declare

@i int

set@i=1

while

@i<=6

begin

if @i=1 set @name=

'a'if @i=2 set @name=

'b'if @i=3 set @name=

'c'

if @i=4 set @name=

'd'if @i=5 set @name=

'e'if @i=6 set @name=

'f'

set @sql =

'select * from tb where name = @name'

exec

sp_executesql @sql,n'@name nvarchar(20)'

,@name

set @i = @i + 1

end--檢視快取

select

sql as exec_sql,objtype as exec_type,*

from master..syscacheobjects where dbid=

db_id

('t_db'

)

andsql like

'%select * from tb where name%'

and sql not

like

'%syscacheobjects%'

order

by sql

結果除了剛才的六條記錄,又增加一條記錄如圖:

如上圖,說明

sql server

對於sp_executesql

執行的sql

語句,只要

where

欄位是相同的,儘管值不同,都不再需要重新編譯,而執行使用同乙個快取計畫。

--測試完畢

drop

database t_db

godrop

table tb

go總結,sp_executesql執行計畫會被快取,而execute不可以,如果大量重複查詢,sp_executesql比execute更能提高資料庫效能。

測試sp executesql和exec的效能差別

sp executesql擴充套件儲存過程與t sql的execute功能相似,但有一點不同,通過sp executesql執行的執行計畫會被快取起來,可重複使用。測試 nz.perfectaction nzperfect gmail.com 下面測試sp executesql和exec的效能差別 ...

sp executesql介紹和使用

sp executesql介紹和使用 execute相信大家都用的用熟了,簡寫為exec,除了用來執行儲存過程,一般都用來執行動態sql sp executesql,sql2005中引入的新的系統儲存過程,也是用來處理動態sql的,如 exec sp executesql sql,n count i...

sp executesql介紹和使用

execute相信大家都用的用熟了,簡寫為exec,除了用來執行儲存過程,一般都用來執行動態sql sp executesql,sql2005中引入的新的系統儲存過程,也是用來處理動態sql的,如 exec sp executesql sql,n count int out,id varchar 2...