【发布时间】:2016-08-11 18:23:04
【问题描述】:
我目前正在使用 Apache Derby 作为我的应用程序的临时本地数据库,我想要一些关于如何优化 INSERT 性能的提示。
当应用程序启动时,它会从 CSV 文件中读取记录 - 这可能是数百万,但更可能是数十万。处理完它们后,最后的 SELECT 查询会汇总信息。
目前插入 6000 条记录大约需要 1 分钟。有 3 个表,其中 2 个存储唯一数据,一个是两者之间的查找表 - 如下所示:
CREATE TABLE table1
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
field1 VARCHAR(40))
CREATE TABLE table2
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
field1 VARCHAR(100),
field2 INT,
field3 VARCHAR(40))
CREATE TABLE table1table2lookup
(id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
field1 INT NOT NULL,
field2 INT NOT NULL)
我目前使用参数化的 PreparedStatements 和 Batching 来尝试提高速度。
我还关闭了自动提交模式,以便我只在批量插入时提交。
【问题讨论】:
-
您是否尝试过使用 Derby 内置的 CSV 文件导入工具?见stackoverflow.com/a/2339690/193453