【问题标题】:Apache Derby & Java - Optimising InsertsApache Derby 和 Java - 优化插入
【发布时间】: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)

我目前使用参数化的 PreparedStatementsBatching 来尝试提高速度。

我还关闭了自动提交模式,以便我只在批量插入时提交。

【问题讨论】:

标签: java sql database derby


【解决方案1】:

来自“Tuning Derby”doc

尽可能避免在自动提交模式下插入插入可能会很痛苦 自动提交模式很慢,因为每次提交都涉及更新 为每个 INSERT 语句登录磁盘。提交不会返回 直到执行物理磁盘写入。为了加快速度:运行 自动提交假模式,在一个事务中执行多个插入, 然后显式地发出一个提交。

但是对于您的初始导入,您应该考虑使用导入过程直接从文件加载数据:

如果您的应用程序允许对表进行初始加载,您可以 使用导入过程将数据插入表中。德比不会 使用加载到空表时记录各个插入 这些接口。 See Derby 工具和实用程序指南 有关进口程序的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多