如何优化 multi table join 视图以获得更快的响应?

How to optimise multi table join view for a faster response?

问题陈述

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

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

我尝试了什么?

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

关于如何优化 的任何提示,如在内存中caches/databases 使用或尝试?我感谢任何指向正确方向的指示!

拉姆,

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

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

    1.1。创建一个中间层 table 来存储全局数据,以便快速搜索 1.2 缓存使用的查询数据并将其与条件哈希相关联。看看Redis,速度还挺快的,每次能存很多信息;

  2. 如果您在搜索中不需要它们,请不要执行所有连接;
  3. 如果可能,请尝试在您的查询中实现延迟加载 (https://en.wikipedia.org/wiki/Lazy_loading)。
  4. 拆分输出。例如,如果你有月份数据,缓存每个关闭月份的数据,这样你就可以只关注最近的数据
  5. 分小步拆分输出。如果您可以将查询分成更小的子集并单独显示每个子集,请使用 Ajax 以便用户可以看到他的数据已经出现。

由于我们显示了大量统计信息,我的开始屏幕过去需要 2 分钟才能显示。所以我们将它分成更小的页面(使用 4 和 5)并大量使用缓存(1.2)。现在它在 1 秒内加载(渲染图表需要时间)。

祝你好运