如何优化查询更新?

时间:2015-09-15 08:42:01

标签: sql sql-server

我运行以下语句,它将更新超过9300万行。

SET rowcount 10000
 update t 
  set [OC]=r.[OC]
  from [dbo].[Vente] t 
  inner join [dbo].[OC] r
   on t.[Date Time] between r.[DATE DEBUT] and r.[DATE FIN]
while @@rowcount>0
BEGIN
 update t 
  set [OC]=r.[OC]
   from [dbo].[Vente] t 
  inner join [dbo].[OC] r
  on t.[Date Time] between r.[DATE DEBUT] and r.[DATE FIN]
end
SET rowcount 0

如何优化它?

2 个答案:

答案 0 :(得分:0)

在t。[日期时间]上有索引时,我会批量更新与一天相关的数据,例如:

public void create () {
        paddleRect = new Rectangle();

        paddleRect.x = 0;
        paddleRect.y = 0;
        ...

您可能需要在日期时间字段上进行一些转换才能获得当天。根据您的数据,您还可以考虑批量更新固定数量的行。

答案 1 :(得分:0)

我觉得你的update语句会进入无限循环,因为你不会每次都排除更新的记录。

您需要为更新添加一个条件,即t。[OC]<> r。[OC]以避免不必要的写入。并且如果t.OC被假设为空以进行更新,并且在第一次更新之后不会发生变化,则添加t。[OC]为空

尝试使用合并声明