哪个数据库操作最重?

时间:2014-02-27 13:13:20

标签: sql sql-server database tsql

如果我在同一张桌子上执行CRUD操作,那么在性能方面最重要的操作是什么?

人们说DELETE and then INSERT在某些情况下优于UPDATE,这是真的吗?然后UPDATE是最重的操作?

2 个答案:

答案 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语句搜索的密钥上有索引,而你没有更新密钥。

对于几乎没有索引/外键的小型表,操作运行得如此之快,以至于这不是一个大问题。