数据库引擎更新逻辑

时间:2015-01-15 17:55:58

标签: sql-server insert-update

当在SQL Server表中更新记录时,db引擎如何物理地执行这样的请求:它是INSERT + DELETE还是UPDATE操作?

众所周知,数据库和任何语句的性能取决于许多变量。但我想知道是否可以推广一些事情。

  • 是否存在阈值(表大小,查询长度,#记录受影响...)之后,数据库在UPDATE后切换到一种方法或另一种方法?

  • 如果有时SQL Server在请求逻辑更新时物理上执行插入/删除,是否有系统视图或指标可以显示此信息? - 即,如果数据库引擎自启动以来已经执行了所有插入,更新和删除的运行总计,那么在发出单个UPDATE之后,我将能够弄清楚数据库的行为方式。

  • 根据SQL Server版本(2008,2012 ...),UPDATE语句的行为是否有任何区别

非常感谢。 彼得

2 个答案:

答案 0 :(得分:0)

没有触发器的基表上的UPDATE始终是物理更新。 SQL Server没有这样的阈值。您可以在sys.dm_db_index_usage_stats中查找使用情况统计信息。

答案 1 :(得分:-1)

更新会修改现有行。如果是插入/删除,那么您将获得重复密钥的更新失败。

插入/更新/删除也可以进行离散许可。因此,用户可以更新记录,但不能插入或删除,这也会导致它不能正常工作。