【发布时间】:2012-04-18 23:03:15
【问题描述】:
我的问题主要是关于“什么对性能最好”,但也有点“哲学上”的意思(如果有影响的话)......所以让我们直接进入。
[TableA].[ColumnB] 存储一个需要存在于 [TableC].[ColumnD] 中的值。马上,没有涉及外键的答案 - 只是假设它们在这种环境中是“不允许的”,无论出于何种原因。
但是由于“情况 x,y,z”,[TableA].[ColumnB] 有时会得到 [TableC].[ColumnD] 中不存在的值,因为,比方说,[TableA] 是从在运行代码中作为“序列化 blob”存在的对象,数据的内存表示,并且 [ColumnB] 值在这些值被其他进程从 [TableC].[ColumnD] 删除之前填充。无论如何,这是为了举例,所以不要陷入“为什么会发生这种情况”,只要接受它就会发生。
要“解决”问题,这两种方法中哪种方法最好: 1. 在 [TableA] 上创建一个触发 on-INSERT 的触发器,将 [ColumnB] 更新为它应该是的值(假设我有坏值到好值的“映射”)。或者,2. 每隔一小时/一分钟/无论运行更新查询的任何时间运行一个计划作业,以将所有可能的“坏”值更改为它们相应的“好”值。
更一般地说,什么对性能更好和/或什么是最佳实践:触发器还是定期计划作业?在上下文中,假设 [TableA] 通常大约有数十万行,插入一次发生 10-100 条记录,频率为每隔几分钟到每天几次。
【问题讨论】:
-
谢谢大家!触发它是......我对在 20 多个不同的数据库上创建一个并不兴奋,但是,这就是生活。
标签: sql sql-server performance triggers