这在很大程度上取决于几个因素,例如:
- 准确度有多重要?从数字显示的那一刻起,数字是否需要准确无误?
- 检索速度有多重要?是否更准确地显示数字是否更准确?
- 写作速度有多重要?是否更快地将每个“行”写入?
- 涉及多少数据?我们是在谈论数百万行还是数百行?
- 多个行同时更新的频率是多少?一般情况下,“工作修订”的许多行是一次更新的,还是更有可能一次只涉及一行?
每一项都有不同的权衡取舍,并且有多种选择可以满足各自的平衡。
- 每次插入,更新或删除新行时,您都可以创建更新“缓存”总计的触发器。这将确保准确性和快速检索,但会减慢写入速度,因为它每次都会涉及“缓存”表的额外更新,而这又涉及行级锁定以确保数字保持准确。锁定减慢其他操作的速度将取决于同一“工作修订”的其他操作同时发生的频率。
- 您每次都可以计算该值。这可确保值准确,并且插入/更新速度很快,但计算该值可能效率低且速度慢。
- 您可以将值存储在缓存表中,但只能定期更新。这样可以确保读取和写入都很快,但代价是准确性。
如果你只处理少数行,那么这些行之间没有太大区别,并且“每次只计算它”就可以了。如果没有实际需要让事情变得更快,那么每次计算都需要“更多normal”
一如既往:不要只询问一般情况下的好处。描述您自己的代码,查看瓶颈所在,并倾向于遵循“Don't, yet”规则。