4

我主要使用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% 也是相当可观的。这是我想换的主要原因。


笔记

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

4

3 回答 3

3

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

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

于 2009-10-20T21:19:34.050 回答
1

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

于 2009-10-20T21:17:35.137 回答
1

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

于 2009-10-20T21:27:20.873 回答