我正在使用SQL Server 2008,这类问题(INSERT + UPDATE vs DELETE + INSERT)被问了很多次,但根据我的理解,我的情况有点不同。请参阅下面的附图。
我有一张表BOM
,但稍后我需要更新数量,插入新材料,不需要材料,所以我删除了。
我的问题是:对于一张非常大的桌子(10M +行)
答案 0 :(得分:0)
这取决于表/索引结构,触发器等。
在某些情况下,您可以执行UPDATE语句,但实际上可以在后台执行DELETE / INSERT操作。
在某些情况下,使用“软删除”更快 - 只需将行标记为已删除,然后,在安静时间(周末),您可以安排物理删除行,对索引进行碎片整理等。您可以使用MERGE命令一次执行INSERT / UPDATE / DELETE,但需要测量性能,将其与单个INSERT / DELETE / UPDATE语句进行比较。在许多情况下,我更喜欢先删除,然后更新,最后插入。
它还取决于更改行的数量...有时将数据移动到新表(堆)更快,然后在那里创建索引,最后删除/重命名表。