我有一个非常大的数据库,只有60多个演出,有许多表有数百万行。我收到一些超时错误,所以我正在重新考虑我的一些代码设计。
目前,我的pseduo代码是这样的:
从person = 123(删除约200行)的表中删除
然后我重新插入更新的数据(再次,200行)。数据总是不同的,因为它对时间敏感。
如果我要进行更新,而不是插入,我必须先选择行(我在c#中使用ORM)。
TL;博士 我只是想知道,简单的问题,什么是更具成本效益。 选择/更新或删除/插入?
答案 0 :(得分:6)
1)如果您更新属于聚簇索引键的任何列,那么您的更新将在内部作为删除/插入处理
2)你如何处理基数与UPDATE的区别? IE浏览器。 person = 123有200行要删除,但只有199要插入。更新将无法处理此问题。
您最好的方法应该是使用MERGE
状态和table valued paramneter新值。当然,没有ORM可以处理这个问题,但是你提到了“性能”,术语“性能”和“ORM”不能用在同一个句子中......
答案 1 :(得分:0)
使用Delete / Insert,您将两次写入数据库。一次删除,一次插入。您还将分别记录这两个事务,除非您在单个事务中正确地包装整个过程。
您可以测试这两种方法并在SQL事件探查器中观察结果,但9/10更新会更快。
请注意,我确保将人员密钥编入索引,以便您不进行完整的表扫描以查找受影响的记录。
最后,正如@Mundu所说,您可能希望通过ADO.NET而不是ORM使用参数化查询来执行此操作。