首页 > 解决方案 > mysql Aurora中upsert的性能问题

问题描述

我在这里发布了一个性能问题,我们正在处理 MySQL Aurora 数据库中的 Upsert 语句。详情如下所述。

背景细节:假设有一个模式 db1 和一个名为 tab1(col1,col2,col3,col4,col5,col6) 的表。在 col5 和 col6 上创建了唯一索引。我们在模式 db1 中创建了一个与 tab1 具有相同结构的唯一视图,其中包含来自 tab1 的最新数据。还有一个名为 db2 的模式,其中创建了一个表 tab2,它具有与 tab1 相同的结构和唯一索引。使用 upsert 语句将来自唯一视图的数据插入/更新到模式 db2 的 tab2 中。每天都会执行此过程,以便 tab2 将拥有来自 tab1 的最新数据。

问题:第一次,由于tab2中没有可用的数据,upsert语句按预期执行得非常快。第二次 delta load 来自 schema db1 的 tab1 的唯一视图。应该使用 upsert 语句在模式 db2 的 tab2 中插入和更新此增量/增量数据。以下 upsert 语句需要很长时间才能执行。不确定,为什么需要很长时间。语法如下。

INSERT INTO tab2 SELECT v.*,CURDATE() FROM db1.uniqueview AS v ON DUPLICATE KEY UPDATE col1=v.col1,col2=v.col2, col3=v.col3, col4=v.col4;

Tab1 目前大约有 200 万行。当我们运行上述命令时,这些数据很容易插入到 tab2 中,对于下一次增量加载,upsert 操作非常慢。

请帮助解决问题或您的想法。

提前致谢

标签: mysqlupsert

解决方案


推荐阅读