【问题标题】:MySQL database add number in table or calculate with a queryMySQL数据库在表中添加数字或使用查询计算
【发布时间】:2020-04-12 14:58:06
【问题描述】:

我想知道是否最好添加一个表列来存储与不同表上的特定 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

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

【问题讨论】:

  • 不!基本上是因为您会忘记在user 表中维护计数。除非您使用触发器自动执行计数维护
  • @RiggsFolly 我正计划使用触发器。问题仍然存在,但性能会更好吗?谢谢!
  • 对于一百个用户来说可能并不明显。我建议尝试两种方法并衡量。

标签: mysql database database-design


【解决方案1】:

是的,根据用户 ID 选择单行将比从 Posts 表中聚合行更快。在最坏的情况下,聚合将具有 O(n) 的时间复杂度,即扫描整个表。

您提出的解决方案(触发器)肯定会加快此选择操作。但也有明显的缺点。触发器本质上将向帖子表上的任何插入/更新添加另一个更新操作。所以对 Posts 表的 UPDATE 或 INSERT 操作会变慢。

老实说,这类性能问题只对大型数据集产生影响。我怀疑你正在做的任何事情都不是那么大,以至于性能在这里是一个问题。如果我是正确的,我建议您采用最简单的方法(不要有额外的列来跟踪帖子数)。如果性能成为问题,您可以随时添加这样的优化。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2015-06-26
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多