如果我通过删除和插入更新,是否存在任何潜在的性能问题

时间:2013-08-29 10:33:20

标签: sql sql-server performance

我正在使用SQL Server,我有一个与N-1相关的表到另一个表,我有一个进程通过删除所有相关行并再次插入来更新N表的信息。

我可以在表格中进行搜索,并检查我要插入的行是否已经存在,但这需要比较每一列,而且对我来说更容易删除它们并将它们插回。

这导致主键增长和增长,我担心将来的表现。

所以,问题是,这是否会导致将来查询减少,更新行要好得多,或者这根本不是问题?

由于

编辑:我不是每次都删除所有行,我只是删除相关的行,所以如果要插入3个新行,我会搜索当前的行,删除它们并插入新行

3 个答案:

答案 0 :(得分:1)

对于SQL Server内部DML原语,UPDATE是要执行的最便宜的DML。 DELETE排名第二。 INSERT是最贵的。

插入和删除的组合永远不会更快。最好的情况是,SQL Server在内部执行UPDATE为INSERT + DELETE。在这种情况下,你最终可能会平等。如果更新是本机处理的,那么它会更快。更快或更慢取决于表结构和数据,以及查询计划。

但是,性能损失可能还不错。您可以交换生产力以提高绩效。

答案 1 :(得分:0)

现在您要删除所有相关行。这意味着你有一堆与另一个表记录相关的记录。

而不是删除为什么不更新它。你有所有记录的主键。开发时可能会耗费时间,但会缩短处理时间。

让我举个例子:

<强>表1

 id name
 1  XXXX
 2  YYYY
 3  ZZZZ

<强>表2

 pm_id  id   address
 1      1    Address1
 2      1    Address2
 3      1    Address3
 4      2    Address4
 5      2    Address5
 6      3    Address6

现在,如果你想改变与id = 2(表1)相关的记录,那么你有2条来自Table2的记录,即id = 4和id = 5

因此您现在可以更新该记录。 让我知道我是否理解错了......

答案 2 :(得分:0)

我可能忽略了你的环境,但如果你正在使用SqlServer 2008,你肯定应该考虑使用Merge命令。有关简单示例,请参阅SQL MERGE statement to update data。比替代品更容易使用合并。