【问题标题】:Optimizing query response time优化查询响应时间
【发布时间】:2016-10-07 06:38:57
【问题描述】:

我的网络应用程序中有一个实时的、可过滤的报告,它正在查询 MySQL 中的贷款和贷款支付列表。目标是在表格行中显示每笔贷款,然后在表格列中显示其贷款支付列表,每个列代表当天的贷款支付总和。我们还允许用户选择日期范围和聚合级别(每天/每周/每月)。如果用户选择 9 月 1 日至 3 日进行每日聚合,结果将如下所示:

Loan ID |  sept 1  |  sept 2  |  sept 3
---------------------------------------
0001    |  $350    |  $239.45 |  $112
0002    |  $100    |  $0      |  $75

2 个数据库表是 Loan 和 Payment,其中 Payment 存储了 Loan ID、日期和每次付款的金额。

当我们在 60 天的范围内运行此查询时,结果是大约 45 秒的响应时间。然后,我们尝试创建自己的预聚合表,该表每年包含 366 列(贷款 ID + 每日日期列,表示当天的付款总和)。这将响应时间增加到 > 60 秒。这甚至不包括更慢的每周或每月聚合。

我们如何加快速度?理想情况下,我们正在寻找 10-15 秒的响应时间,并且我尝试了所有可以找到的缓存/索引技术,但均未成功。

【问题讨论】:

  • 更新您的问题并显示您的表格架构
  • 您应该与业务人员讨论60列表格的业务需求或实际应用是什么?对于 Sep1-3 示例,结果表看起来不错,但对于 60 天的日期范围?谁会看这张桌子?您可以将特定贷款的付款打印为多行报告,您可以显示是否有人在 60 天内支付了贷款?这些结果很容易被实际用户准备和阅读。

标签: mysql performance


【解决方案1】:

您应该与业务部门讨论 60 列表格的业务需求或实际应用是什么?

Sep1-3 示例的结果表看起来不错,但对于 60 天的日期范围?谁会看这张桌子?按周或月分组会更好吗?

如果贷款数量有限

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2020-02-08
    • 1970-01-01
    • 2022-12-09
    • 2018-07-10
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多