问题陈述

我有一个页面,该页面必须显示多联接查询(由不同表和子视图上的多个联接组成的视图)的记录。所连接的六个表中有两个表的大小随着时间的推移非常迅速地增长,在此过程中查询变得越来越慢。

我无权重新设计架构,并且应该使用现有表并显示可用数据的摘要。为用户提供了在多个列值和范围内过滤主数据的选项,因此对于每个过滤器/取消过滤器操作,我都选择了存储库。

我尝试了什么?


我已经尽可能利用索引优化了表。
我已经为MySQL服务器移到了更高的内存和CPU电源计算机


使用的技术
即将实现的是它的MySQL数据库,并带有SpringJPA + Hibernate。其中两个表具有超过一百万条记录,当前存储库查询需要20秒的时间,这是无法接受的。

关于如何在内存缓存/数据库中优化或使用它的任何提示?我感谢任何正确方向的指点!

最佳答案

内存,

由于我们无权访问您当前的查询,或者至少没有预期的输出,您应该尝试:


尽可能多地缓存数据。您可以采用以下策略:

1.1。创建一个中间表来存储全局数据,以便快速进行搜索
1.2缓存使用的查询数据,并将其与条件哈希关联。看一下Redis,他很快就可以每次存储很多信息。
如果您在搜索中不需要它们,请不要执行所有联接。
如果可能,请尝试在查询中实施延迟加载(https://en.wikipedia.org/wiki/Lazy_loading)。
分割输出。例如,如果您有月份数据,则为每个封闭月份缓存数据,这样您就可以将查询集中在最近的数据上
分小步拆分输出。如果您可以将查询分成较小的子集并分别显示每个子集,请使用Ajax,以便用户可以看到他的数据已经出现。


由于我们显示了大量的统计信息,因此我有一个开始屏幕,需要花费2分钟才能显示。因此,我们将其分成较小的页面(使用4和5),并大量使用了缓存(1.2)。现在它以1s的速度加载(绘制图表需要时间)。

祝好运

关于mysql - 如何优化多表联接 View 以获得更快的响应?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35151075/

10-16 21:53