【问题标题】:Quickest way to copy over table data in oracle/postgresql在 oracle/postgresql 中复制表数据的最快方法
【发布时间】:2020-08-18 10:35:59
【问题描述】:

我正在查看一个 Spring Boot 应用程序,该应用程序用于根据上次更新日期将数据从临时表复制到永久表。仅当上次更新日期大于所需日期时才会复制,因此不会复制所有记录。目前,该表有大约 300K+ 条记录,使用 spring JPA 的过程需要 2 多个小时(对于所有这些记录),根本不可行。目标是将其缩短到最多 15 分钟以下。我试图看看使用 JDBC 模板会带来多大的不同。pl/sql 脚本会是更好的选择吗?还想看看是否有更好的选择。感谢您的时间。

目前使用 oracle 数据库,但考虑进行 postgresql 迁移。

谢谢!

【问题讨论】:

  • 您可以为执行此复制的方法添加代码吗?

标签: spring oracle plsql spring-data-jpa spring-jdbc


【解决方案1】:

您可以使用直接的 SQL 查询(适用于 Oracle 或 PostgreSQL)来执行此操作。假设您的 temp_table 具有与永久表相同的列,最后更新的日期列称为 last_updated,并且您想复制自 2020-05-03 以来更新的所有记录,您可以编写如下查询:

INSERT INTO perm_table
SELECT *
FROM temp_table
WHERE last_updated > TO_DATE('2020-05-03', 'YYYY-MM-DD')

在您的应用中,您可以通过占位符直接或通过JdbcTemplate 传递'2020-05-03'

【讨论】:

  • sri,当你不需要时,永远不要执行逐行处理。总是使用 SQL 来执行这样的批量操作。这实际上就是数据库设计和构建的目的,试图在应用程序代码中复制该过程是徒劳的。如果你能按照尼克的建议去做,你的表现可能会提高几个数量级。
  • @pmdba 我自己再好不过了!
  • @Nick/pmdba- 谢谢你们的输入,我认为使用直接 sql 会快得多。我不得不优化这个现有的程序(幸好它处于开发阶段),所以我来了。会及时通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2011-03-10
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多