日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【优化SQL Server循环更新、插入耗时长的问题】

發(fā)布時間:2024/1/17 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【优化SQL Server循环更新、插入耗时长的问题】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一: 工作當(dāng)中遇到更新較多數(shù)據(jù)時,使用循環(huán)(while,或游標(biāo))進行增刪改時,特別費時?

WHILE @i <= @rows
BEGIN
  SELECT @appNo = AppNumber, @roleid = RoleId, @statusi= Status, @empId = EmployeeId FROM #Atable WHERE ID = @i
  IF EXISTS(SELECT 1 FROM Btable WHERE AppNumber = @appNo AND RoleID = @roleid AND EmployeeId = @empId)
? ? ? ?BEGIN
? ? ??  UPDATE Btable
    SET Status = @statusi, CreatedBy = NULL, ModifiedOn = GETDATE()
    WHERE AppNumber = @appNoi AND RoleId = @roleidi AND EmployeeId = @empId
  END
  ELSE
  BEGIN
    INSERT INTO Btable(EmployeeId, AppNumber, RoleId, Status, CreatedOn, CreatedBy, ModifiedOn, ModifiedBy)
    SELECT EmployeeId, AppNumber, RoleId, Status, GETDATE(), CreatedBy, GETDATE(), ModifiedBy FROM #Atable WHERE ID = @i
  END

  SELECT @i= @i + 1
END

二:利用表左、右連接進行批量刪除解決循環(huán)增刪改耗時長的問題

  update aru set aru.Status = arul.Status, aru.ModifiedOn = GETDATE()
  from Btable as aru
  inner join Atable as arul
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID

三:A,B兩張表中有可能數(shù)據(jù)不相等,可以聲明兩個變量@count1,@count2

  DECLARE @Count1 int,@Count2 int
  select @Count1 = COUNT(1) from Atable
  select @Count2 = COUNT(1) from Btable

四: 根據(jù)@count1和@count2的大小判斷是否新增還是刪除

IF(@Count1 > @Count2)
BEGIN  
  SELECT * INTO Btable
  from Atable as arul
  left join Btable as aru
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID
  where aru.AppNumber is null and aru.RoleId is null and aru.EmployeeID is null
END
ELSE
BEGIN
  update aru set aru.Status = 0
  from Btable as aru
  left join Atable as arul
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID
  where arul.AppNumber is null and arul.RoleId is null and arul.EmployeeID is null
END

數(shù)據(jù)量較多時,又比較、又更新、又新增時,利用循環(huán)特別費時,批量更新的效率是循環(huán)的幾十倍甚至上百倍

?

個人工作中總結(jié)出來,如有轉(zhuǎn)載請注明出處!

轉(zhuǎn)載于:https://www.cnblogs.com/chengxiaofei2018/p/10065706.html

總結(jié)

以上是生活随笔為你收集整理的【优化SQL Server循环更新、插入耗时长的问题】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。