我有一个 Java 程序,用于在 Oracle 数据库中插入大量(750.000)条记录。我正在使用 OJDBC6 库和 OCI 客户端。要写入的表包含 330 列,其中 8 列出现在一个或多个索引中。
在尝试了两种方法之后,我仍然在为一些性能问题而苦苦挣扎。
- 一次创建一个准备好的语句,为每条记录填充参数,然后执行该语句需要 1h29。
- 一次创建准备好的语句,填充每条记录的参数,将它们添加到批处理中并每 500/1000/5000(我尝试了几个选项)执行批处理记录需要 0h27。
但是,当使用 Informatica PowerCenter 等 ETL 工具将相同的数据映射到相同的表时,只需几分钟。我知道达到这个时间可能是一厢情愿,但我怀疑是否无法获得任何性能。
有没有人知道这个行动的合理时间安排,以及如何实现?任何帮助表示赞赏,非常感谢提前!
(一个相关问题:我也将不得不更新很多记录。最有效的方法是什么:跟踪已更改的列并创建仅包含这些列的依赖于记录的准备语句;或始终更新所有列,从而重用相同的准备好的语句?)