我正在使用SQL Server,我有一个与N-1相关的表到另一个表,我有一个进程通过删除所有相关行并再次插入来更新N表的信息。
我可以在表格中进行搜索,并检查我要插入的行是否已经存在,但这需要比较每一列,而且对我来说更容易删除它们并将它们插回。
这导致主键增长和增长,我担心将来的表现。
所以,问题是,这是否会导致将来查询减少,更新行要好得多,或者这根本不是问题?
由于
编辑:我不是每次都删除所有行,我只是删除相关的行,所以如果要插入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。比替代品更容易使用合并。