如何优化 multi table join 视图以获得更快的响应?
How to optimise multi table join view for a faster response?
问题陈述
我有一个页面,它必须显示来自 多连接查询 的记录(视图由不同表和子视图上的多个连接组成)。随着时间的推移,正在连接的六个表中有两个 大小增长得非常快 ,在此过程中,查询变得 越来越慢 。
我无权重新设计 架构,我应该使用现有的表格并显示可用数据的摘要。用户可以选择在多个列值和范围内过滤主数据,因此对于每个 filter/unfilter 操作,我都会访问存储库。
我尝试了什么?
- 我已经在可能的情况下使用索引优化了表。
- 我已经为mysql服务器
移动了更高的内存和cpu动力计算机
正在使用的技术
即将实施,它的 MySQL 数据库,上面有 SpringJPA+Hibernate。其中两个表有超过百万条记录,目前存储库查询需要 20 秒的时间,这是不可接受的。
关于如何优化 的任何提示,如在内存中caches/databases 使用或尝试?我感谢任何指向正确方向的指示!
拉姆,
由于我们无法访问您当前的查询,或者至少无法访问您应该尝试的预期输出:
尽可能多地缓存数据。您可以采用以下策略:
1.1。创建一个中间层 table 来存储全局数据,以便快速搜索
1.2 缓存使用的查询数据并将其与条件哈希相关联。看看Redis,速度还挺快的,每次能存很多信息;
- 如果您在搜索中不需要它们,请不要执行所有连接;
- 如果可能,请尝试在您的查询中实现延迟加载 (https://en.wikipedia.org/wiki/Lazy_loading)。
- 拆分输出。例如,如果你有月份数据,缓存每个关闭月份的数据,这样你就可以只关注最近的数据
- 分小步拆分输出。如果您可以将查询分成更小的子集并单独显示每个子集,请使用 Ajax 以便用户可以看到他的数据已经出现。
由于我们显示了大量统计信息,我的开始屏幕过去需要 2 分钟才能显示。所以我们将它分成更小的页面(使用 4 和 5)并大量使用缓存(1.2)。现在它在 1 秒内加载(渲染图表需要时间)。
祝你好运
问题陈述
我有一个页面,它必须显示来自 多连接查询 的记录(视图由不同表和子视图上的多个连接组成)。随着时间的推移,正在连接的六个表中有两个 大小增长得非常快 ,在此过程中,查询变得 越来越慢 。
我无权重新设计 架构,我应该使用现有的表格并显示可用数据的摘要。用户可以选择在多个列值和范围内过滤主数据,因此对于每个 filter/unfilter 操作,我都会访问存储库。
我尝试了什么?
- 我已经在可能的情况下使用索引优化了表。
- 我已经为mysql服务器 移动了更高的内存和cpu动力计算机
正在使用的技术 即将实施,它的 MySQL 数据库,上面有 SpringJPA+Hibernate。其中两个表有超过百万条记录,目前存储库查询需要 20 秒的时间,这是不可接受的。
关于如何优化 的任何提示,如在内存中caches/databases 使用或尝试?我感谢任何指向正确方向的指示!
拉姆,
由于我们无法访问您当前的查询,或者至少无法访问您应该尝试的预期输出:
尽可能多地缓存数据。您可以采用以下策略:
1.1。创建一个中间层 table 来存储全局数据,以便快速搜索 1.2 缓存使用的查询数据并将其与条件哈希相关联。看看Redis,速度还挺快的,每次能存很多信息;
- 如果您在搜索中不需要它们,请不要执行所有连接;
- 如果可能,请尝试在您的查询中实现延迟加载 (https://en.wikipedia.org/wiki/Lazy_loading)。
- 拆分输出。例如,如果你有月份数据,缓存每个关闭月份的数据,这样你就可以只关注最近的数据
- 分小步拆分输出。如果您可以将查询分成更小的子集并单独显示每个子集,请使用 Ajax 以便用户可以看到他的数据已经出现。
由于我们显示了大量统计信息,我的开始屏幕过去需要 2 分钟才能显示。所以我们将它分成更小的页面(使用 4 和 5)并大量使用缓存(1.2)。现在它在 1 秒内加载(渲染图表需要时间)。
祝你好运