0

我有一个包含大约 220 万行的表,并且在表上我试图通过几个连接来提取查询。这些连接之一是子查询。我已经尽可能地优化了它,而不是完全重写应用程序代码。

以下是EXPLAIN()此特定查询的结果:

我的解释查询

正如我用红色突出显示的那样,点击表中有很多记录要经过。第 4 行是我的子查询连接,但运行我自己的测试,缓慢似乎来自那个巨大的表。

因此,当我运行此查询时,我正在查看我在 Amazon CloudWatch 中预置的 IOPS 和延迟:

云观察

看看这个,可以说我需要更多的预置 IOPS 吗?我现在只有1000个。

我真的知道在这里还能做什么。

我也想知道 - 我在这个 RDS 上有一个只读副本,在队列中的只读副本上运行这个查询是否有意义,这样我的主数据库就不会影响生产性能?

4

1 回答 1

0

我决定创建一个只读副本并将所有这些冗长的查询卸载到那里。

这些查询大部分用于客户报告,当客户在数据库中有大量点击时,页面会运行很长时间并最终超时。因此,使用这个只读副本,我使用 cron 作业创建了一个报告队列系统。我没有即时向他们提供报告,而是将其排队并在从只读副本准备好时通过电子邮件发送给他们。问题解决了!我希望。

于 2014-07-01T14:31:00.193 回答