Java大数据库插入

时间:2010-02-19 19:37:19

标签: java database jdbc

我有一个数据库,我需要插入一批数据(一次大约500k条记录)。我正在使用derby进行测试,并且看到这些记录的插入时间大约为10-15分钟(我正在使用Java进行批量插入)。

这段时间看起来很慢(适用于普通笔记本电脑)吗?是否有加快速度的方法?

感谢,

杰夫

2 个答案:

答案 0 :(得分:5)

这一次看起来非常合理,与我观察到的时间一致。如果您希望它更快,您需要使用批量插入选项并禁用安全功能:

  • 使用PreparedStatements和5,000到10,000个记录的批次,除非它必须是一个交易
  • 在DBMS中使用批量加载选项
  • 暂时禁用插入
  • 的完整性检查
  • 暂时禁用索引或删除索引并在插入后重新创建
  • 禁用事务日志记录并在之后重新启用。

编辑:数据库事务受磁盘I / O的限制,在笔记本电脑和大多数硬盘驱动器上,重要的数字是磁盘的寻道时间。

笔记本电脑的磁盘速度相当慢,转速为5400转。在此速度下,寻道时间约为5毫秒。如果我们假设每条记录一次搜索(在大多数情况下估计过高),则插入所有行需要40分钟(500000 * 5 ms)。现在,使用缓存机制和排序机制可以减少这种情况,但您可以看到问题的来源。

我(当然)大大过分简化了这个问题,但是你可以看到我要去哪里;期望数据库以与顺序批量I / O相同的速度执行是不合理的。你必须对你的记录应用某种索引,这需要时间。

答案 1 :(得分:0)

这些表有很多索引吗?更新这些索引可能需要花费大量时间。