我有底层表,数据在这些表上不断变化。每隔一分钟左右,我运行一个存储过程,将这些底层表中的数据汇总到一个汇总表中。摘要的时间非常长(~30),所以没有一个“摘要视图”是没有意义的。此外,汇总表经常被多个用户访问,它需要快速、响应性强,不能停机。
要解决这个问题,请在存储过程中执行以下操作:
。
我的问题是:
当用户试图访问“当前汇总表”时,当总结过程在上面的步骤2和步骤3之间时,会发生safe/proper?
。
发布于 2020-06-03 17:00:43
通过对细节使用触发器,可以使摘要保持同步。对于像average这样的东西,还需要在汇总表中跟踪和计数,这样就可以重新计算平均值了。如果具有批量搅动,并且Server具有两种类型的触发器,则按行触发器的开销可能比操作的所有行的开销都要高。插入可以生成汇总行或更新它,删除可以更新或删除摘要行,而更新可能会更改键,两者都是如此。当然,对于任何细节行,都可能有多种类型的摘要行。
Oracle有一个物化视图,所以可能SQL Server也有物化视图。哦,看,是的!谷歌是我的朋友,那么多值得记住的东西!在最好的情况下,这将类似于上面的简写。
在带有此类触发器的详细表中,有可能出现大量延迟。使用定期查询重新生成汇总表可能足以满足某些用途。过程可以截断前一个表以供重用,在其中生成一个新表,然后在转换交换中生成名称。如果表中或表中有时间戳,则过程可以跳过不变的更新。用于查询的锁、磁盘和CPU开销通常比查询的开销小得多。
除了视图之外,像中位数这样的摘要很难支持,但是如果索引(不是聚集的,排序的不是散列索引),它可能运行得很快,因为查询可以从非聚集索引中直接完成。过多的索引会减缓事务的速度(搅动),所以很多人使用复制表来报告,而父事务表上的索引很少,而复制表上的索引面向报表。
https://stackoverflow.com/questions/62177453
复制相似问题