我的一个数据库表中有一个缓存字段,可以根据许多不同的表以及这些表中的字段状态进行更新。
每个表都通过触发器调用相同的函数:updateCachedField(basetable_id INTEGER)。 updateCachedField函数查询所有这些其他表并计算基表的新缓存值。 updateCachedField函数很复杂且成本很高。
在单个事务期间,许多影响缓存字段的表都可能被更改。因此,在单个事务中,updateCachedField函数可能被调用50次......但只有5个不同的basetable_id。
有没有办法优化这个,以便updateCachedField函数只被调用5次而不是50 +?
答案 0 :(得分:0)
我认为您最好的选择是使用可延迟约束触发器和基于xmin值或其他信息的查询。实际上,您也可以复制“日志”数据以便在其他地方进行快照。
如果没有明确的信息,它不是很清楚你在看什么,但一种选择是基本上有三组表:
直播表。更新(增量或其他聚合有用信息)将在更新或插入时写入日志表。
日志表。这些只是追加。
聚合快照表,定期聚合新的日志表集。
然后,您可以拥有一个实时视图,该视图将显示当前聚合数据,仅汇总上一个快照。