mysql - 有没有办法为多对多关系制作汇总表?

标签 mysql database many-to-many query-optimization

我们有一个包含太多行的数据库表。为了加快性能,我们正在尝试创建一个汇总表。这对于一对一的关系非常有效。例如假设 furniture有一个type和一个 manufacturer_id ,您可以拥有一个包含这两列和 counts 的表。柱子。查询该表并很快获得给定类型的家具数量将很容易。

但是,如果存在多对多关系怎么办?所以每件家具也可以有一个或多个colors和一个或多个distributors 。然后会发生什么?有什么方法可以总结这些数据,以便我可以快速找到有多少家具是绿色的?或者有多少是蓝色和黄色的?

显然这只是一个虚构的例子。但是给定一个包含数百万行的巨大数据库表,我如何创建一个汇总表来快速查找聚合信息?

最佳答案

假设您知道自己在做什么并且知道这是一个真正的瓶颈:您现在有性能测量吗?你知道从哪里开始需要时间吗?

无论如何,您都必须查询数据库才能获得该计数。因此,您可以将其存储在单独的表中,例如颜色计数和分配器计数。另一种解决方案是将这些查询的结果缓存在缓存系统中。例如,如果您已经使用了 memcached 或其他一些工具。

当您只有一个数据库时,最简单的就是创建一个表:

table color count
color_id
amount

这是一个非常简单的查询。您可以很好地对其进行索引,并且不需要联接。

更新可以通过触发器、cron 或在更新多对多表时完成。看你的需求和能力。考虑到更新记录也需要时间,因此使用它来优化读取,这就是我在您的问题中读到的内容。

关于mysql - 有没有办法为多对多关系制作汇总表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566364/

相关文章:

php - 读PHP Session需要 `htmlspecialchars()`吗?

asp.net - 使用 ADO.NET 批量插入多条记录并获取所有记录的身份

SQL 多对多选择与链接表

linq-to-sql - Linq2Sql 多对多关系和插入新对象的问题

android - 数据库兼容性 : Building a database to support apps across multiple OSs

c# - Entity Framework Code First - 没有集合的多对多

MYSQL 将字符串分解为不同的结果

mysql - Django:更大的查询集和小号。数据库命中率,反之亦然

mysql - 将时间序列数据链接到关系数据库中的记录

java - 如何更改 OO 数据库(例如 DB4O)中的模式?