MySQL 数据库在 table 中添加数字或使用查询计算

MySQL database add number in table or calculate with a query

我想知道是否最好添加一个 table 列来存储与不同 table 上的特定 ID 关联的 X 条目的数量,或者每次计算具有查询。

例如,我有以下 tables

Users Table

ID | name | status
------------------
1  | John |   1
2  | Jack |   2
3  | Mary |   1
Posts Table

ID | user_id |  text  | status
------------------------------
1  |    1    | blabla |   1
2  |    1    | blabla |   1
3  |    2    | blabla |   2
4  |    1    | blabla |   1
5  |    3    | blabla |   1

是否最好在用户 table 上添加一个包含帖子数量的额外列,这样会更快(?和/或更好?)显示 100 个用户的列表和没有帖子数量的列表任何额外的查询,否则我必须检查有多少状态为 1 的条目与 user_id X x 100 个用户相关,例如

是的,select根据用户 ID 生成单个行比从帖子 table 聚合行更快。在最坏的情况下,聚合的时间复杂度为 O(n),即扫描整个 table。

您提出的解决方案(触发器)肯定会加快此 select 操作。但是没有table缺点。触发器实质上将向 post 上的任何 insert/update 添加另一个更新操作 table。因此,对 Posts table 的更新或插入操作会变慢。

老实说,这类性能问题只在大型数据集上才开始变得重要。我怀疑无论你在做什么,都不会大到性能成为问题的程度。如果我是正确的,我建议您采用最简单的方法(不要有额外的列来跟踪 post 计数)。如果性能成为问题,您以后可以随时添加这样的优化。