【问题标题】:Would a trigger be more efficient in this situation?在这种情况下触发器会更有效吗?
【发布时间】:2014-01-18 06:15:07
【问题描述】:

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

Main Table - Visits
ID
Date
CurrentRoomHistoryID
CurrentStatusHistoryID

Related Table - RoomHistory
ID
Name
StartDate
EndDate

Related Table - StatusHistory
ID 
StatusID
StartDate
EndDate

为了速度,您可以看到我们将当前房间的 ID 和历史记录保留在主表中。现在,当任何一个更新时,我都会为之前的房间或状态记录设置结束日期,然后更新主表。

使用TRIGGER 将结束日期添加到上一条记录并更新主表会更快更高效吗?

【问题讨论】:

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

标签: sql sql-server triggers sql-server-2008-r2


【解决方案1】:

我相信效率不会那么依赖于单独的更新查询或触发,而是取决于您如何过滤要更新的记录。事实上,更新查询中的任何内容都会进入触发器定义 - 可能会进行一些细微的更改。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2023-01-31
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多