SQL Server 2005的首选合并方法是什么?

时间:2009-10-20 21:15:08

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

我主要使用存在方法将行合并到表中,但我正在考虑切换到行计数方法。有什么理由不去吗?

存在方法

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


效果

行计数方法似乎要快得多。在一个约有5万行的表格上,它以存在方法的1/5时钟计时。测试不是太科学,但即使保守的+/- 15%也是如此。这是我想切换的主要原因。


注意

为了便于阅读,这些例子的目的很简单。它们绝不反映我的实际情况。

3 个答案:

答案 0 :(得分:3)

我没有看到任何特别的问题。你必须尝试哪一个更高效(尽管我认为在这个例子中这是微不足道的)。但正如Cade指出的那样,使用交易。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

不切换的最大原因是你现在所拥有的工作和改变引入了新bug的可能性。如果你想在更新其他东西时改变,那没关系,但是你真的要做什么从变化中获益?我怀疑性能增益是否可能非常小,因为您提供的示例似乎使用单个记录。