[SQL SERVER][Performance]Insert Statement效能比較測試

[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'

 

 

image

SQL ProFiler

image

執行完畢:5134。

 

執行計畫

image

每一句Insert Statement都會產生該執行計畫。

 

用戶端統計資料

image

總執行時間: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'

 

image

 

SQL ProFiler

image

執行完畢:35。

 

執行計畫

image

 

用戶端統計資料

image

總執行時間: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'

 

image

 

SQL ProFiler

image 

執行完畢:20。

 

執行計畫

image

和One Statement_1執行計畫一模一樣。

 

用戶端統計資料

image

總執行時間:12。

 

總表 

image

 

結論:

這次測試中看來One Statement_2勝出,如果以後還有需要組多筆Insert Statement語法時,

我應該不會再組傳統語法了。