如果我在同一张桌子上执行CRUD操作,那么在性能方面最重要的操作是什么?
人们说DELETE and then INSERT
在某些情况下优于UPDATE
,这是真的吗?然后UPDATE
是最重的操作?
答案 0 :(得分:3)
就像生活中的所有事情一样,这取决于。
SQL Server使用WAL(提前写入日志记录)来维护ACID(原子性,一致性,隔离性,耐久性)属性。
插入需要记录数据页和索引页更改的条目。如果发生页面拆分,则需要更长时间。然后将数据写入数据文件。
删除标记数据和索引页面以供重复使用。手术后数据仍然存在。
更新以删除和插入的方式实施。有两倍的日志条目。
有助于插入的是在运行作业之前预先分配数据文件中的空间。自动生成数据文件非常昂贵。
总之,我希望平均更新是最昂贵的操作。
我绝不是存储引擎方面的专家。
请查看http://www.sqlskills.com - Paul Randals博客和/或Kalen Daleny SQL Server Internals书籍http://sqlserverinternals.com/。这些作者深入研究了可能发生的所有案例。
答案 1 :(得分:0)
它主要取决于您在此表上的foregin键和索引。对于删除和isertion,必须在外键引用上检查作为外键和索引的一部分的每一列,并且必须重建包含该列的每个索引。
如果你执行DELETE然后INSERT,那么检查和重建会发生两次。如果它是一个非常大的表,那么重建索引可能需要很长时间,在这种情况下,更新将会更快。
当然,如果你在使用update语句搜索的密钥上有索引,而你没有更新密钥。
对于几乎没有索引/外键的小型表,操作运行得如此之快,以至于这不是一个大问题。