Java ApacheDerby插入速度很慢

Java ApacheDerby插入速度很慢,java,database,derby,Java,Database,Derby,我正在使用ApacheDerby以1000万的顺序存储大量行。每次启动批插入时,我将向表中插入多达200万行。 该表有一个UUID作为主键,另一个表中有一个UUID的约束。 插入需要几个小时!!!为什么? 我已经在所有的表上创建了索引,但后来我删除了它,因为我相信Derby会自动为每个表创建一个带有主键的索引。 我正在使用批处理更新和一个准备好的语句,如图所示(以下面非常简单的形式) 以下是结果 05/01/12 12:42:48 Creating 2051469 HE Peaks in DB

我正在使用ApacheDerby以1000万的顺序存储大量行。每次启动批插入时,我将向表中插入多达200万行。 该表有一个UUID作为主键,另一个表中有一个UUID的约束。 插入需要几个小时!!!为什么? 我已经在所有的表上创建了索引,但后来我删除了它,因为我相信Derby会自动为每个表创建一个带有主键的索引。 我正在使用批处理更新和一个准备好的语句,如图所示(以下面非常简单的形式)

以下是结果

05/01/12 12:42:48 Creating 2051469 HE Peaks in DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:44:18 Progress: Written (10%) 205146/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:46:51 Progress: Written (20%) 410292/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:50:46 Progress: Written (30%) 615438/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE 05/01/12 12:56:46 Progress: Written (40%) 820584/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:04:29 Progress: Written (50%) 1025730/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:13:19 Progress: Written (60%) 1230876/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:22:54 Progress: Written (70%) 1436022/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:34:53 Progress: Written (80%) 1641168/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:47:02 Progress: Written (90%) 1846314/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:58:09 Completed: Written (100%) 2051469/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE - Time Taken:01:15:21
当我插入越来越多的行时,过程变得越来越慢(可能是因为索引)。我目前使用的DB模型很好地满足了我的目的,我不愿意改变它。 我做错什么了吗。。。还是期待太多? 有没有办法提高插入速度


编辑


我已经使用autocommit和其他工具对DB进行了调优。我发现,当插入数百万条记录时,我的应用程序确实花费了不合理的时间。选择此数据当然非常快。

您是否尝试过关闭自动提交模式?发件人:

在自动提交模式下,插入速度可能非常慢,因为每次提交都涉及一个 为每个INSERT语句更新磁盘上的日志。提交将不会返回,直到 执行物理磁盘写入。要加快速度:

  • 在自动提交错误模式下运行,在一个事务中执行多个插入,然后 然后显式地发出一个commit
  • 如果应用程序允许初始加载到表中,则可以使用导入 将数据插入表的过程。在以下情况下,Derby不会记录单个插入 使用这些接口加载到空表中。请参阅Derby参考 有关的更多信息,请参阅手册和Derby服务器及管理指南 进口程序

感谢您的回复。我已经使用autocommit和其他工具对DB进行了调优。我发现,当插入数百万条记录时,我的应用程序确实花费了不合理的时间。选择这个数据当然是非常快的。我不得不重新构造数据库,以使用ProtocolBuffers编写一个对象集合,它工作得非常好,速度也非常快-唯一的问题是,每当我想使用数据时,我必须加载整个对象集合-但这对我来说已经足够了。@AndyTudor-你能解释一下吗:“我不得不重新构造我的数据库,以使用ProtocolBuffers编写一个对象集合,它工作得非常好,速度也非常快——唯一的问题是,每当我想使用数据时,我都必须加载整个对象集合“。我面临着类似的挑战,想知道这是否也是我可以做的。。您知道您可以使用Derby将数据持久保存在磁盘上,并从最后一个记录ID开始加载远程数据吗?”?(很抱歉这么明显。)
05/01/12 12:42:48 Creating 2051469 HE Peaks in DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:44:18 Progress: Written (10%) 205146/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:46:51 Progress: Written (20%) 410292/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 12:50:46 Progress: Written (30%) 615438/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE 05/01/12 12:56:46 Progress: Written (40%) 820584/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:04:29 Progress: Written (50%) 1025730/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:13:19 Progress: Written (60%) 1230876/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:22:54 Progress: Written (70%) 1436022/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:34:53 Progress: Written (80%) 1641168/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:47:02 Progress: Written (90%) 1846314/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE
05/01/12 13:58:09 Completed: Written (100%) 2051469/2051469 entries to DB Table APP.ST_HE_PEAK_TABLE - Time Taken:01:15:21