[英]MySQL database add number in table or calculate with a query
我想知道是否最好添加一个表列来存储与不同表上的特定 ID 关联的 X 条目数,或者每次使用查询计算条目数。
例如,我有以下表格
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
在用户表上添加一个包含帖子数量的额外列是否更好,以便更快(?或者更好?)显示 100 个用户和帖子数量的列表而无需任何额外查询,否则我必须例如,检查有多少状态为 1 的条目与 user_id X x 100 个用户相关联
是的,基于用户 ID 选择单行将比从 Posts 表中聚合行更快。 在最坏的情况下,聚合将具有 O(n) 的时间复杂度,即扫描整个表。
您提出的解决方案,一个触发器,肯定会加速这个 select 操作。 但也有明显的缺点。 触发器本质上将向帖子表上的任何插入/更新添加另一个更新操作。 因此 Posts 表上的 UPDATE 或 INSERT 操作会变慢。
老实说,这类性能问题只开始与大型数据集有关。 我怀疑你正在做的任何事情都不是那么大,以至于性能在这里是一个问题。 如果我是正确的,我建议您采用最简单的方法(不要有额外的列来跟踪帖子计数)。 如果性能成为问题,您可以随时添加这样的优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.