使用触发器作为sql聚合函数的替代方案?

l3zydbqr  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我有一个包含数百万行的表,经常需要知道其中一列的总数。在查询中使用sum太慢了,因为它需要接触整个表。有没有一个简单的方法来保持一个准确的总数而不在每个查询中计算它?
我考虑过在插入、更新或删除行时使用触发器来增加或减少存储的总数。但有一个问题(我假设)是,如果表被截断,那么总数就不会为零。我可以接受,但是还有什么需要注意的吗?如果有更好的办法,请告诉我。

wbgh16ku

wbgh16ku1#

理论上,触发器可以保持摘要表的准确更新,只要:
你没有禁用触发器
不能直接更新摘要表
您不会通过truncate table对源数据进行更改(如您所述)
也:
必须使用正确的初始值为摘要表种子
源表和摘要表都必须使用innodb,因此更新是原子的
维护摘要表是非规范化的一个例子。与所有非规范化一样,这有可能导致数据异常。你负责维护数据的完整性;数据库对你的帮助有限。
我建议您需要不时地仔细检查汇总表(例如,每小时一次就足够了),以确保它没有失去同步,如果已经失去同步,请进行更正。这取决于你,因为数据库不能为你检查。

相关问题