Nat*_*teJ 1 sql sql-server performance triggers
我的问题主要是关注"什么是最好的表现",但也有点"哲学"说话(如果它有所作为)......所以让我们跳进去.
[TableA].[ColumnB]存储[TableC]中需要存在的值.[ColumnD].蝙蝠,没有涉及外键的答案 - 只是假设他们在这种环境中"不允许"出于任何原因.
但是由于"情况x,y,z",[TableA].[ColumnB]有时会得到[TableC]中不存在的值.[ColumnD],因为,比方说,[TableA]从一个存在的对象中填充在将代码作为"序列化blob"运行时,数据的内存中表示形式,并且在通过某些其他进程从[TableC].[ColumnD]中删除这些值之前填充[ColumnB]值.无论如何,这是例如,所以不要陷入"为什么会发生这种情况",只要接受它.
要"修复"这个问题,哪种方法最适合这两种方法:1.在[TableA]上创建一个触发on-INSERT的触发器,将[ColumnB]更新为它应该的值(假设我有一个"映射") "不好的价值观".或者,2.每小时/每分钟运行一个预定作业/运行更新查询以将所有可能的"坏"值更改为相应的"好"值.
更一般地说,什么是更好的性能和/或什么是最佳实践:触发器,或定期的预定作业?在上下文中,假设[TableA]通常在数十万行的数量级上,插入一次发生10-100条记录,每隔几分钟发生一次,每天发生几次.
上插入.
执行触发器就像回调一样 - 它们在逻辑上更合理,并且它们会在每个查询中传播任何延迟.进行连续检查(称为轮询或计算机作业),您不时会遇到更严重的延迟时刻.在几乎所有情况下,使用触发器/回调是更好的方法,因为在每个查询中添加1ms的滞后优于看似随机间隔的100ms滞后.
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |