【发布时间】:2019-02-06 11:14:23
【问题描述】:
我的设置 - Oracle DB 12.1C,带有 Hibernate 的 Spring 应用程序。
表:
create table war
(
id int generated by default as identity not null constraint wars_pkey primary key,
t1_id int references t1 (id) on delete cascade not null,
t2_id int references t2 (id) on delete cascade not null,
day timestamp not null,
diff int not null
);
我想在表中插入 10 000 条记录。使用repository.saveAll(<data>) 需要70 秒,使用JpaTemplate.batchUpdate(<insert statements>) 需要68 秒。当我创建没有约束的新临时表时,需要 65 秒。
最好/最快的方法是什么,如何将这么多的记录插入 Oracle DB?不幸的是,CSV 不是一个选项。
【问题讨论】:
-
10000 行现在绝对不被认为是“巨大的”。甚至不是“大”。这实际上是一个很小的数字
-
您已经排除了可能是最快的选项(通过 SQL 加载器或外部表的 CSV)。那么,你希望这个速度有多快?您是否愿意忘记 Hibernate 并编写一些 Oracle SQL 或 PL/SQL?
-
@APC 很遗憾,我们不能使用 CSV,因为这是客户禁止的。我对几乎所有选项持开放态度 - 只需通过 JAVA/Kotlin 代码完成。
-
那么这10000条记录是从哪里来的呢?大概不是一个用户在 GUI 中输入大量数据? (@a_horse_with_no_name 正确地说 10000 行对于数据库来说并不大,但输入量非常大)。
-
@APC 它是由我们的算法生成的 -> 它必须由 JVM 应用程序本身插入。
标签: oracle performance hibernate spring-data-jpa bulk-operations