我的数据库中有许多表,其中包含用户可以喜欢、不喜欢、共享、收藏等的项目(照片、文章、视频)的信息。
每次用户对某个项目执行操作时,它都会记录在一个简单的表格中,如下所示:
ItemID | UserID | Liked | Shared | Favourited
1 1 NULL 1 NULL
2 25 1 1 1
3 18 0 NULL NULL
当我编写查询以返回表中的项目列表(例如照片)时,我还想返回每个项目拥有的喜欢、分享等的总数。目前,我正在使用嵌套的 SELECT 语句即时计算。如果我的项目表的大小增加了数十万,并且我经常需要点赞、分享等方面的统计数据,那么继续动态计算统计数据是否安全,还是应该将它们作为总数存储在数据库中的某个地方?
最佳答案
我建议不要存储总计,因为这似乎是一个事务性数据库,并且您将非常频繁地插入行,因此如果您存储总计,则每次插入一行时,您都需要更新总计。
所以实际上表中的每个插入都会跟在一个更新语句之后,只是为了保持总计更新。对于事务数据库来说,这听起来是一个非常糟糕的设计。
对于数据几乎没有变化(如果有的话)的数据仓库来说,存储总计是一个不错的选择。
我的建议是创建 View ,它会即时为您计算总计。添加适当的索引以提高这些查询的效率。当您的数据增长太大以至于连表上的索引都做得不够时,请考虑索引 View 。
关于sql-server - 存储总数或即时计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944570/