假设我们在 MySQL 数据库中有一个表“posts”,顾名思义,它存储用户在某个社交媒体平台上的帖子。现在我想显示每个用户创建的帖子数。一个潜在的解决方案是:
从帖子中选择 COUNT(*) 个帖子
....等等;
但至少对我来说,这看起来像是一个昂贵的查询。使用名为(number_of_posts)的列在某个表(例如统计数据)中保留记录不是更好吗?我知道在最后一个场景中,一旦创建帖子,我就必须更新表(帖子)和(统计数据)。您认为解决这个问题的最佳方法是什么?
最佳答案
类似查询
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 的开发人员可以依靠它来解决您的问题,而无需做大量额外的优化工作。他们为你做到了。花时间让应用程序的其他部分正常工作。
关于mysql - 记录行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50836538/