记录行数

时间:2018-06-13 11:50:15

标签: mysql database database-design relational-database query-performance

假设我们有一张桌子"帖子"在MySQL数据库中,顾名思义就是存储用户'一些社交媒体平台上的帖子。现在我希望显示每个用户创建的帖子数量。一个潜在的解决方案是:

SELECT COUNT(*) FROM posts WHERE ....等;

但对我来说 - 至少 - 这看起来像是一个昂贵的查询。使用名为(number_of_posts)的列保留某些表中的记录(统计数据)会更好。我知道在最后一个场景中,我必须更新两个表(帖子)和& (统计)一旦创建一个帖子。您认为最佳方式解决这个问题是什么?

1 个答案:

答案 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的开发人员可以依靠它来解决问题,而无需进行大量额外的优化工作。他们为你做了。花时间让应用程序的其他部分工作。