【问题标题】:What is the preferred merge method for SQL Server 2005?SQL Server 2005 的首选合并方法是什么?
【发布时间】:2010-12-08 12:22:09
【问题描述】:

我主要使用 Exists Method 将行合并到表中,但我正在考虑切换到 Row Count Method。有什么理由不这样做吗?

存在方法

If Exists(Select * From Table Where ID = @ID) Begin

    Update Table Set Value = @Value Where ID = @ID  

End Else Begin

    Insert Into Table (Value) Values (@Value);      

End


行计数法

Update Table Set Value = @Value Where ID = @ID 

If (@@RowCount = 0) Begin

    Insert Into Table (Value) Values (@Value);      

End


性能

行计数方法似乎要快得多。在一个大约有 50k 行的表上,它以 Exists Method 时间的 1/5 计时。这些测试不是太科学,但即使保守的 +/- 15% 也是相当可观的。这是我想切换的主要原因。


注意

为了便于阅读,特意简化了示例。它们绝不反映我的实际情况。

【问题讨论】:

    标签: sql sql-server sql-server-2005 merge upsert


    【解决方案1】:

    无论哪种方式,您都可能需要将其包装在事务中。

    【讨论】:

      【解决方案2】:

      我没有发现任何特别的问题。不过,您必须尝试哪一个性能更高(尽管我认为在此示例中这无关紧要)。但正如 Cade 指出的那样,使用事务。

      另外,请注意,对于 SQL Server 2008,您可以使用 MERGE 语句(以防您要升级)。

      【讨论】:

        【解决方案3】:

        不切换的最大原因是您现在拥有的东西正在工作并且进行更改会引入新错误的可能性。如果您想在更新其他内容时进行更改,那没关系,但您真正要做什么从改变中获益?我怀疑性能增益(如果有的话)可能非常小,因为您提供的示例似乎使用单个记录。

        【讨论】:

          猜你喜欢
          • 2011-01-10
          • 1970-01-01
          • 2010-09-18
          • 1970-01-01
          • 2010-10-10
          • 2012-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多