[C#]提高 Update、Delete 效能

  • 18424
  • 0
  • C#
  • 2020-12-31

[C#]提高 Update、Delete 效能

昨天示範了如何使用批次處理新增作業

今天朋友詢問 SqlBulkCopy 沒有提供批次處理更新、刪除作業,

是否有其他辦法使用批次處理更新和刪除作業呢?

答案是有的,我想到有2個辦法,1.利用 SqlDataAdapter.  2.修改我之前的寫法3

下面分別測試這兩種批次寫法效能表現如何(逐筆更新寫法就不在測試效能了)

 

note:Delete寫法大同小異

 

 

模擬25500筆資料異動

image

 

寫法1


CREATE proc usp_updateByTest
@c1 int,@c2 varchar(30),@c3 datetime,@c4 bit,@c5 real
as
UPDATE dbo.Test
SET c2=@c2 ,c3=@c3,c4=@c4,c5=@c5
where c1=@c1

 

 

image

 

 

執行寫法1

image

 

 

5次執行時間如下

image

image

image

image

image

5次花費時間平均(ms):  1167.8

 

寫法2


CREATE proc [dbo].[usp_UpdateByTestType]
@mytable utype_Test READONLY
as
UPDATE dbo.Test
SET c2=t2.c2 ,c3=t2.c3,c4=t2.c4,c5=t2.c5
from dbo.Test t1 join @mytable t2  
on t1.c1=t2.c1

 

 

image

 

執行寫法2

image

 

5次執行時間如下

image

image

image

image

image

5次花費時間平均(ms):  488.6

 

結果

寫法1批次更新花費時間 寫法2批次更新花費時間

1167.8 ms

488.6 ms

 

 

參考

使用 DataAdapter 執行批次更新

使用參數配合 DataAdapter