我有一个大约有220万行的表,在桌子上我试图通过一些连接来提取查询。其中一个连接是子查询。我已经对它进行了优化,因为它可以完全重写应用程序代码。
以下是此特定查询中EXPLAIN()
的结果:
由于我以红色突出显示,因此点击表中会记录很多记录。第4行是我的子查询连接,但是运行我自己的测试,缓慢似乎来自那个巨大的表。
所以,当我运行此查询时,我正在查看Amazon CloudWatch中的预配置IOPS和延迟:
考虑到这一点,可以说我需要更多的预配置IOPS吗?我现在只有1000。
我真的知道在这里做了什么。
我也想知道 - 我在这个RDS上有一个只读副本,在队列中的只读副本上运行这个查询是否有意义,这样我的主数据库不会影响生产的性能?
答案 0 :(得分:0)
我决定创建一个只读副本并将所有这些冗长的查询卸载到那里。
这些查询中的大多数都是针对客户端报告的,当客户端在数据库中有大量点击时,页面会运行很长时间并最终超时。因此,使用此只读副本,我使用cron作业创建了一个报告队列系统。我不是直接给他们报告,而是将其排队并在从阅读副本准备就绪时通过电子邮件发送给他们。问题解决了!我希望。