1

我的一个数据库表中有一个缓存字段,该字段根据许多不同的表和这些表中的字段状态进行更新。

这些表中的每一个都通过触发器调用相同的函数:updateCachedField(basetable_id INTEGER)。updateCachedField 函数查询所有这些其他表并计算基表的新缓存值。updateCachedField 函数很复杂,而且成本很高。

在单个事务期间,可能会更改许多影响缓存字段的表。因此,在单个事务中,updateCachedField 函数可能会被调用 50 次……但只有 5 个不同的 basetable_id。

有没有办法对此进行优化,以便 updateCachedField 函数只被调用 5 次而不是 50 次以上?

4

1 回答 1

0

我认为您最好的选择是使用基于 xmin 值或其他信息的可延迟约束触发器和查询。实际上,您还可以复制“日志”数据以在其他地方进行快照。

如果没有明确的信息,它并不清楚您在看什么,但一种选择是基本上拥有三组表:

  1. 活表。更新(增量或其他聚合有用的信息)在更新或插入时写入日志表。

  2. 日志表。这些只是附加的。

  3. 聚合快照表,定期聚合新的日志表集。

然后,您可以获得一个实时视图,该视图将显示当前聚合数据,仅从最后一个快照聚合。

于 2013-04-27T02:28:09.887 回答