我在SQL数据库中有几个表,我希望有另一个表(比如Stats
),它将保存这些表的一些统计数据(平均值,计数等)
每次修改一个表时,我都可以对X进行更新,如下所示:
INSERT INTO Things VALUES (x, y, z);
UPDATE Stats
SET AverageX = (SELECT avg(x) FROM Things WHERE Things.y="identifier")
WHERE Stats.y="identifier";
但这似乎有点低效(每次平均)。此外,Stats
可能不包含与Stats.y="identifier"
匹配的记录,因此我可能需要检查此内容并可能首先创建记录。
所以,问题是:体面的人如何做这样的事情?
答案 0 :(得分:1)
评论太长了。
您可以通过在要保留数据的所有表上使用触发器(插入,删除和更新)来自动执行此操作。您可能不希望将平均值存储在统计信息表中。相反,你想要总和和数。
但是,如果满足以下条件,您应该只这样做:
如果不满足这些条件并且您的表格相对较小,那么拥有一个可以即时计算统计数据的视图就足够了。
请注意,使用索引计算某些统计信息的速度非常快 - 尤其是MIN()
和MAX()
。
维护触发器并非易事。并且保持不同表之间的一致性是棘手的(考虑bulk insert
或truncate table
不执行触发器。)