Sql 在这种情况下,触发器会更有效吗?

Sql 在这种情况下,触发器会更有效吗?,sql,sql-server,triggers,sql-server-2008-r2,Sql,Sql Server,Triggers,Sql Server 2008 R2,我有一个实例,其中有一个主记录和几个相关的表。在此场景中,我们将所有历史记录保存在相关表中。所以在这种情况下,看起来是这样的 Main Table - Visits ID Date CurrentRoomHistoryID CurrentStatusHistoryID Related Table - RoomHistory ID Name StartDate EndDate Related Table - StatusHistory ID StatusID StartDate EndDat

我有一个实例,其中有一个主记录和几个相关的表。在此场景中,我们将所有历史记录保存在相关表中。所以在这种情况下,看起来是这样的

Main Table - Visits
ID
Date
CurrentRoomHistoryID
CurrentStatusHistoryID

Related Table - RoomHistory
ID
Name
StartDate
EndDate

Related Table - StatusHistory
ID 
StatusID
StartDate
EndDate
为方便起见,您可以看到我们在主表中保留了当前房间的ID和历史记录。现在,当其中一个得到更新时,我为上一个房间或状态记录设置结束日期,然后更新主表


使用
触发器将结束日期添加到上一条记录并更新主表是否会更快、更高效?

我相信效率不会像依赖于单独的更新查询或触发器那样依赖于如何过滤要更新的记录。事实上,update查询中的任何内容都会进入触发器定义——可能会有一些小的更改

就性能而言。您的ID字段应在所有3个表中正确索引


如果您正在为正在更新或插入的当前记录更新某些内容,则触发器可能会更快。但由于您正在更新以前的文件室或状态数据,因此在触发器或更新查询中,查找和更新将占用相同的时间。

“更高效”-比什么?比从应用程序运行单独的查询来更新主表以及状态和房间历史记录表中的相关记录更重要的是:触发器将始终运行,因此可能是更新历史记录的更正确位置位,如询问“一段字符串有多长?”-您需要准确地告诉我们当前操作的工作原理,以便我们能够比较苹果与苹果。话虽如此,大多数SQL开发人员都会尽量避免触发器。如果要避免触发器,我想我会尽量在其他地方提高性能。