我们有一个包含太多行的数据库表。为了加快性能,我们正在尝试创建一个汇总表。这对于一对一的关系非常有效。例如假设 furniture
有一个type
和一个 manufacturer_id
,您可以拥有一个包含这两列和 counts
的表。柱子。查询该表并很快获得给定类型的家具数量将很容易。
但是,如果存在多对多关系怎么办?所以每件家具也可以有一个或多个colors
和一个或多个distributors
。然后会发生什么?有什么方法可以总结这些数据,以便我可以快速找到有多少家具是绿色的?或者有多少是蓝色和黄色的?
显然这只是一个虚构的例子。但是给定一个包含数百万行的巨大数据库表,我如何创建一个汇总表来快速查找聚合信息?
最佳答案
假设您知道自己在做什么并且知道这是一个真正的瓶颈:您现在有性能测量吗?你知道从哪里开始需要时间吗?
无论如何,您都必须查询数据库才能获得该计数。因此,您可以将其存储在单独的表中,例如颜色计数和分配器计数。另一种解决方案是将这些查询的结果缓存在缓存系统中。例如,如果您已经使用了 memcached 或其他一些工具。
当您只有一个数据库时,最简单的就是创建一个表:
table color count
color_id
amount
这是一个非常简单的查询。您可以很好地对其进行索引,并且不需要联接。
更新可以通过触发器、cron 或在更新多对多表时完成。看你的需求和能力。考虑到更新记录也需要时间,因此使用它来优化读取,这就是我在您的问题中读到的内容。
关于mysql - 有没有办法为多对多关系制作汇总表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566364/