[SQL SERVER][Performance]Insert Statement效能比較測試
SQL2008後可支援multiple records in one statement,
今天執行User所附的Insert Statement,發現這不單單只有寫法簡便而已,
其實在效能上也是有所不同的,
這裡我大概測試三種Insert Statement在效能上的差異。
傳統語法
set nocount on
declare @i int
declare @mysql varchar(4000)
set @i=0
while @i<100
begin
set @mysql='insert into dbo.mytbl values ('+ cast(@i as varchar)+ ',''ricoisme'',getdate())'
print @mysql
set @i=@i+1
end
print 'go'
SQL ProFiler
執行完畢:5134。
執行計畫
每一句Insert Statement都會產生該執行計畫。
用戶端統計資料
總執行時間:132。
One Statement_1 語法
set nocount on
declare @i int
declare @mysql varchar(4000)
set @i=0
print 'insert into dbo.mytbl values '
while @i<100
begin
if @i=99
begin
set @mysql='('+ cast(@i as varchar)+ ',''ricoisme'',getdate())'
end
else
begin
set @mysql='('+ cast(@i as varchar)+ ',''ricoisme'',getdate()),'
end
print @mysql
set @i=@i+1
end
print 'go'
SQL ProFiler
執行完畢:35。
執行計畫
用戶端統計資料
總執行時間:35。
One Statement_2 語法
set nocount on
declare @i int
declare @mysql varchar(4000)
set @i=0
print 'insert into dbo.mytbl '
while @i<100
begin
if @i=99
begin
set @mysql='select '+ cast(@i as varchar)+ ',''ricoisme'',getdate()'
end
else
begin
set @mysql='select '+ cast(@i as varchar)+ ',''ricoisme'',getdate() union all'
end
print @mysql
set @i=@i+1
end
print 'go'
SQL ProFiler
執行完畢:20。
執行計畫
和One Statement_1執行計畫一模一樣。
用戶端統計資料
總執行時間:12。
總表
結論:
這次測試中看來One Statement_2勝出,如果以後還有需要組多筆Insert Statement語法時,
我應該不會再組傳統語法了。