数据库引擎更新逻辑
Database Engine Update Logic
当在 SQL 服务器 table 中更新记录时,数据库引擎如何实际执行这样的请求:是 INSERT + DELETE 还是 UPDATE 操作?
众所周知,数据库和任何语句的性能取决于许多变量。但是我想知道有些事情是否可以概括。
是否有一个阈值(table 大小、查询长度、受影响的记录数...),在此之后数据库会根据更新切换到一种方法或另一种方法?
如果请求逻辑更新时 SQL 服务器有时会物理执行 insert/delete,是否有系统视图或指标可以显示这一点? - 即,如果数据库引擎自启动以来执行的所有插入、更新和删除操作总数为 运行,那么我将能够在发出单个 UPDATE 后弄清楚数据库的行为方式.
根据 SQL 服务器版本(2008、2012...)UPDATE 语句的行为是否有任何区别
非常感谢。
彼得
更新编辑现有行。如果它是 insert/delete,那么你会因为重复的键而更新失败。
Insert/Update/Delete 也都可以离散许可。因此,用户可以更新记录,但不能插入或删除,这也导致这不是它的工作方式。
在基础 table 上进行的没有触发器的更新始终是物理更新。 SQL服务器没有这个门槛。您可以查看使用情况统计信息,例如,在 sys.dm_db_index_usage_stats.
中
当在 SQL 服务器 table 中更新记录时,数据库引擎如何实际执行这样的请求:是 INSERT + DELETE 还是 UPDATE 操作?
众所周知,数据库和任何语句的性能取决于许多变量。但是我想知道有些事情是否可以概括。
是否有一个阈值(table 大小、查询长度、受影响的记录数...),在此之后数据库会根据更新切换到一种方法或另一种方法?
如果请求逻辑更新时 SQL 服务器有时会物理执行 insert/delete,是否有系统视图或指标可以显示这一点? - 即,如果数据库引擎自启动以来执行的所有插入、更新和删除操作总数为 运行,那么我将能够在发出单个 UPDATE 后弄清楚数据库的行为方式.
根据 SQL 服务器版本(2008、2012...)UPDATE 语句的行为是否有任何区别
非常感谢。 彼得
更新编辑现有行。如果它是 insert/delete,那么你会因为重复的键而更新失败。
Insert/Update/Delete 也都可以离散许可。因此,用户可以更新记录,但不能插入或删除,这也导致这不是它的工作方式。
在基础 table 上进行的没有触发器的更新始终是物理更新。 SQL服务器没有这个门槛。您可以查看使用情况统计信息,例如,在 sys.dm_db_index_usage_stats.
中