我有一个包含数百万行的表,并且经常需要知道其中一列的总和。在查询中使用SUM太慢,因为它需要触摸整个表。有没有一种万无一失的方法来保持准确的总数而不在每个查询中计算它?
我想过在插入,更新或删除行时使用触发器来增加和减少存储的总数。虽然这是一个问题(我假设),如果表被截断,那么总数不会变为零。我可以忍受,但还有什么值得注意的吗?或者,如果有更好的方法,请告诉我。
答案 0 :(得分:2)
理论上,触发器可以保持汇总表的准确更新,只要:
此外:
维护摘要表是denormalization的一个示例。与所有非规范化一样,这可能会导致数据异常。您负责维护数据完整性;数据库受限于它可以帮助您做到这一点。
我建议您不时仔细检查汇总表(例如每小时可能就足够了),以确保它没有不同步,如果有,则更正它。由您来做这件事,因为数据库无法为您检查。