1

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

我可以在表中进行搜索并检查我要插入的行是否已经存在,但这需要比较每一列,而且我只需将它们全部删除并将它们重新插入就更容易了。

这导致主键不断增长,我担心未来的表现。

所以,问题是,这是否会导致未来查询的减少,并且更新行会更好,或者这根本不是问题?

谢谢

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

4

3 回答 3

1

当涉及到 SQL Server 内部 DML 原语时,UPDATE它是执行成本最低的 DML。DELETE是第 2 名。INSERT是最贵的。

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

不过,这种性能损失可能没问题。您可以用生产力换取性能。

于 2013-08-29T10:38:58.613 回答
0

我可能忽略了你的环境,但如果你使用的是 SqlServer 2008,你肯定应该考虑使用合并命令。有关简单示例,请参阅SQL MERGE 语句以更新数据。也比其他方法更容易使用合并。

于 2013-08-29T20:14:19.403 回答
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(Table1) 相关的记录,您将拥有来自 Table2 的 2 条记录,即 id=4 和 id=5

因此您现在可以更新该记录。如果我理解错了,请告诉我....

于 2013-08-29T10:54:22.597 回答