Sql 存储总值或在运行时求和的最佳实践
我有一个应用程序,其中每个“职务修订”都有许多计算——这涉及到链接到该修订的多行的总和 我想知道的是,最好的做法是:Sql 存储总值或在运行时求和的最佳实践,sql,Sql,我有一个应用程序,其中每个“职务修订”都有许多计算——这涉及到链接到该修订的多行的总和 我想知道的是,最好的做法是: 在作业修订版上存储一个“总计”数字,这样我们就可以在不求和的情况下显示它 向用户显示时计算运行时的总计 这在很大程度上取决于几个因素,例如: 准确性有多重要?在显示图形时,图形是否需要精确 检索速度有多重要?及时显示数字比准确更重要吗 写作速度有多重要?快速写入每个“行”是否更重要 涉及多少数据?我们说的是数百万行,还是数百行 多行同时更新的频率是多少?通常情况下,“作业修订”
这在很大程度上取决于几个因素,例如:
- 准确性有多重要?在显示图形时,图形是否需要精确
- 检索速度有多重要?及时显示数字比准确更重要吗
- 写作速度有多重要?快速写入每个“行”是否更重要
- 涉及多少数据?我们说的是数百万行,还是数百行
- 多行同时更新的频率是多少?通常情况下,“作业修订”的多行同时更新,还是一次只涉及一行
- 您可以创建触发器,每次插入、更新或删除新行时都会更新“缓存”总数。这将确保准确性和快速检索,但会降低写入速度,因为每次都需要额外更新“缓存”表,这反过来又需要行级锁以确保数字保持准确。锁对其他操作的减速程度取决于同一“作业修订”上的其他操作同时发生的频率
- 您可以每次计算该值。这样可以确保值准确,插入/更新速度快,但计算值可能效率低且速度慢
- 可以将值存储在缓存表中,但只能定期更新。这确保了读写速度都很快,但以牺牲准确性为代价
这不是您需要或事实上不必急于解决的问题。如果您的数据库支持物化视图(如Oracle)或类似构造,则这是另一种选择。这样的数据库可以提供针对物化视图的查询重写选项。