mysql - 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 操作非常慢。
请帮助解决问题或您的想法。
提前致谢
解决方案
推荐阅读
- scala - 如何将十六进制字符串转换为字符?
- java - 在java中传递多个参数
- python - 无法点击appium中的按钮,但其他一些还可以
- haskell - 我可以使用 state monad 模拟交互式程序吗?
- sql - varchar 值的转换使用 REPLACE 溢出了一个 int 列
- php - 通过 ...$args 或 func_get_args() 时如何从函数中获取参数名称和值
- python - MySQL:无法在数据库中保存 utf8 字符
- cmake - 在命令行中设置 cmake 变量并将其与字符串进行比较
- cordova - 未验证vs代码断点中的Ionic 4 cordova android调试
- meteor - 如何获取服务器上的当前路由?