假设我们有一张桌子"帖子"在MySQL数据库中,顾名思义就是存储用户'一些社交媒体平台上的帖子。现在我希望显示每个用户创建的帖子数量。一个潜在的解决方案是:
SELECT COUNT(*) FROM posts WHERE
....等;
但对我来说 - 至少 - 这看起来像是一个昂贵的查询。使用名为(number_of_posts)的列保留某些表中的记录(统计数据)会更好。我知道在最后一个场景中,我必须更新两个表(帖子)和& (统计)一旦创建一个帖子。您认为最佳方式解决这个问题是什么?
答案 0 :(得分:1)
查询
SELECT COUNT(*), user_id
FROM posts
GROUP BY user_id
如果在user_id
列上创建索引,则能够执行索引扫描。 Read this。索引扫描速度很快。所以你建议的查询就好了。 SQL和MySQL是针对此类查询而生成的。
并且,像
这样的查询 SELECT COUNT(*)
FROM posts
WHERE user_id = 123456
如果你有user_id
索引,非常。如果你保留一张单独的桌子,你可以节省几十微秒,否则你可能不会。节省的费用很难衡量。但是,在服务器性能和软件维护复杂性方面,您将承担维护该表的成本。
对于刚学习使用数据库软件的人来说,对性能的直觉往往是非常悲观的。数据库软件包中有数千个程序员年的工作来提高性能。真正做到。并且,你可能无法用自己的东西超越它们。
为什么MySQL的开发人员会优化这种东西?因此,使用MySQL的开发人员可以依靠它来解决问题,而无需进行大量额外的优化工作。他们为你做了。花时间让应用程序的其他部分工作。