dum*_*uch 4 delphi ms-access ado delphi-2007
我需要在MS Access表中插入800000条记录.我正在使用Delphi 2007和TAdoXxxx组件.该表包含一些整数字段,一个浮点字段和一个只有一个字符的文本字段.其中一个整数字段(不是autoinc)上有一个主键,另一个整数和float字段上有两个索引.
使用AdoTable.AppendRecord(...)> 10分钟插入数据是不可接受的,因为每次用户开始在程序中使用新数据库时都会这样做.我无法预先填充表格,因为数据来自另一个数据库(无法访问ADO).
通过将记录写入制表符分隔的文本文件并使用tAdoCommand对象执行,我设法将时间缩短到大约1分钟
insert into table (...) select * from [filename.txt] in "c:\somedir" "Text;HDR=Yes"
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这个的开销.
我想,必须有更好的方法.
编辑:
一些其他信息:
编辑:
从我到目前为止得到的所有答案来看,似乎我已经有了将这么多数据插入Access表的最快方法.感谢大家,感谢您的帮助.
既然你已经说过800K记录数据在数据库的生命周期内不会改变,我建议将它作为一个表链接到文本文件,并完全跳过插入.
如果您坚持将其拉入数据库,那么1分钟内的800,000条记录将超过13,000 /秒.我不认为你会在MS Access中击败它.
如果您希望它对用户更具响应性,那么您可能需要考虑加载一些最小数据集,并设置后台线程以在其工作时加载其余数据.
基于文本的解决方案似乎是最快的,但如果您可以获得大小接近最终值的预分配 MS Access,则可以更快地获得它。您可以通过填充典型的用户数据库、关闭应用程序(以便刷新缓冲区)并手动删除该大表的所有记录来做到这一点 - 但不缩小/压缩它。
因此,使用该文件开始真正的填充 - Access 不会请求任何(或很少)额外的磁盘空间。不记得 MS Access 是否有办法自动执行此操作,但它可以提供很多帮助......
| 归档时间: |
|
| 查看次数: |
9287 次 |
| 最近记录: |