繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM