如何优化多表连接视图以获得更快的响应?

时间:2016-02-02 10:36:24

标签: mysql sql hibernate optimization bigdata

问题陈述

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

无权重新设计架构,我应该使用现有的表格和显示摘要可用的数据。用户可以选择在多个列值和范围内过滤主数据,因此对于每个过滤器/未过滤器操作,我都会访问存储库。

我尝试了什么?

  • 我已经使用索引优化了表格。
  • 我已经为mysql服务器移动了更高的内存和CPU电源计算机

正在使用的技术 实现它的MySQL DB,SpringJPA + Hibernate就在它之上。其中两个表有超过百万条记录,目前存储库查询需要20秒的时间,这是不可接受的。

有关如何优化的任何提示,如在内存缓存/数据库中使用或尝试?我很欣赏正确方向的任何指针!

1 个答案:

答案 0 :(得分:1)

拉​​姆

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

  1. 尽可能多地缓存数据。你可以采取以下策略:

    1.1。创建一个中间表来存储全局数据,以便快速搜索 1.2缓存使用的查询数据并将其与条件哈希相关联。看看Redis,他非常快,每次都可以存储大量信息;

  2. 如果您在搜索中不需要它们,请不要使用所有联接;
  3. 如果可能,请尝试在查询中实施延迟加载(https://en.wikipedia.org/wiki/Lazy_loading)。
  4. 拆分输出。例如,如果您有月份数据,请为每个已关闭的月份缓存数据,以便您可以将查询的重点仅放在最近的数据上
  5. 以小步骤拆分输出。如果您可以将查询分解为较小的子集并单独显示每个子集,请使用Ajax,以便用户可以看到他的数据已经出现。
  6. 我有一个开始屏幕,由于我们显示的大量统计数据,用于显示2分钟。因此我们将其拆分为较小的页面(使用4和5)并大量使用缓存(1.2)。现在它加载1秒(渲染图表需要时间)。

    祝你好运