【发布时间】: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