大佬教程收集整理的这篇文章主要介绍了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
;我们需要验证引擎、数据类型等没有引起问题。
每列的单独索引与复合索引不同。
以上是大佬教程为你收集整理的AWS RDS Aurora - 使用子查询更新表非常慢全部内容,希望文章能够帮你解决AWS RDS Aurora - 使用子查询更新表非常慢所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。