【发布时间】:2019-09-04 10:44:12
【问题描述】:
作为日常导入工作的一部分,我是TRUNCATING 表格数据并从原始文件插入数据。
有些表通常导入较大的数据,例如200,000 行范围内的数据,但有些表导入的数据较少,范围为5,000 到30,000 行范围内。
对于大表导入,在插入过程中会花费大量时间,最后有时会出现性能问题。
我正在使用 Java 将这个导入处理到 Oracle 表中。所以这个表不是硬编码的,而是根据他们的工作导入的。
jdbcTemplate.execute("TRUNCATE TABLE " + tableName); --for truncating table
return "INSERT INTO " + tableName + " (" +
columnData.stream().filter(Objects::nonNull).map(ColumnData::getName).collect(joining(", ")) +
", SYSTEM_INSERTED_AT) VALUES (" +
values.stream().collect(joining(", ")) +
", CURRENT_TIMESTAMP)"; --for insertion into table
我想知道在插入过程中使用/*+ APPEND */ 提示是否是个好主意,它是否会提高插入过程中的性能?正如在 oracle 文章中所读到的,为了减少插入,使用 /*+ APPEND */ 并不是一个好主意,因为它最终会影响性能问题。
【问题讨论】:
-
This website 提示,
/*+ APPEND */仅适用于INSERT .. SELECT语句。那么这对你不起作用 -
我强烈推荐使用
PreparedStatements 而不是这个 -
我认为在 PL/SQL 过程中使用批量插入来导入 200.000 行会更好。
-
如果您要再次插入类似的数量,请在 truncate 命令中使用“重用存储”
-
@f1sh 和性能有关系吗?
标签: java sql oracle performance insert