我有一个数据库,需要在其中插入批量数据(一次大约 500k 条记录)。我正在使用 derby 进行测试,发现这么多记录的插入时间约为 10-15 分钟(我正在用 Java 进行批量插入)。
这次看起来是否很慢(在普通笔记本电脑上工作)?有没有办法加快速度?
thanks,
Jeff
这个时间看起来完全合理,并且与我观察到的时间一致。如果你想让它运行得更快,你需要使用批量插入选项并禁用安全功能:
- 使用PreparedStatements和批量5,000到10,000条记录,除非它必须是一个事务
- 使用 DBMS 中的批量加载选项
- 暂时禁用插入的完整性检查
- 暂时禁用索引或删除索引并在插入后重新创建它们
- 禁用事务日志记录并随后重新启用。
编辑:数据库事务受到磁盘 I/O 的限制,在笔记本电脑和大多数硬盘上,重要的数字是磁盘的寻道时间。
笔记本电脑的磁盘速度往往相当慢,转速为 5400 rpm。在此速度下,寻道时间约为 5 毫秒。如果我们假设每条记录一次查找(在大多数情况下过高估计),则插入所有行将需要 40 分钟 (500000 * 5 毫秒)。现在,缓存机制和排序机制的使用在一定程度上减少了这种情况,但你可以看到问题来自哪里。
我(当然)把问题过于简单化了,但是你可以明白我的意思;期望数据库以与顺序批量 I/O 相同的速度执行是不合理的。您必须对记录应用某种索引,这需要时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)