如何解决AWS RDS Aurora - 使用子查询更新表非常慢
目前,我有两个表客户和订单。客户表更像是一个报告表,我想在其中插入客户在商店中的第一个和最后一个订单。相关字段是具有索引的电子邮件列,过滤列“商店”也具有索引。所以当我运行以下查询时:
update Customer a
set
a.first_order_id = (select min(c.order_id) from Orders c
where store = "somename"
and c.email = a.email);
Customer 表有 7k 条记录,Orders 有 700 万条记录。问题是这个查询需要永远完成。解释查询结果为:
1 - select type: update,type: index,key: primary,rows 6992,filtered: 100
2 - select type: dependent subquery,type: ref,key: orders_email_store,rows: 3 million
所以我猜这是一个 6992 x 3 百万的操作。如何提高性能?
我找到的唯一解决方案是使用带有循环的存储过程,这使得子查询更快。
我也尝试对更新进行内部联接,但获取最小订单 ID 的条件是我的问题。
有什么建议吗?也许我的 SQL 很糟糕。
解决方法
c
需要一个复合 INDEX(store,email,order_id)
,按这个顺序。
另外,最好使用“多表更新”而不是子查询。
如果您需要进一步讨论,请提供SHOW CREATE TABLE
;我们需要验证引擎、数据类型等没有引起问题。
每列的单独索引与复合索引不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。