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 计数)。如果性能成为问题,您以后可以随时添加这样的优化。
我想知道是否最好添加一个 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 计数)。如果性能成为问题,您以后可以随时添加这样的优化。