【发布时间】:2011-12-07 03:40:03
【问题描述】:
我需要用数百万条记录填充数据库,而我目前的例程如下:
For I = 1 to 10000000
INSERT INTO TABLE1 ...
INSERT INTO TABLE2 ...
INSERT INTO TABLE3 ...
Next
我注意到记录也以这种顺序(交替)出现在磁盘上的数据库文件中。当我这样做时会不会有性能提升:
For I = 1 to 10000000
INSERT INTO TABLE1 ...
Next
For I = 1 to 10000000
INSERT INTO TABLE2 ...
Next
For I = 1 to 10000000
INSERT INTO TABLE3 ...
Next
或者数据在磁盘上的结构方式对查询性能无关紧要?
【问题讨论】:
-
为什么不直接将csv(或tsv等)文件导入表中?
-
@JackManey 因为源数据不是那种格式。将其转换为 CSV 很容易,但是如何在不先将其写入磁盘(瓶颈)的情况下将其导入?
-
如果您将记录插入 SQLite 数据库,那么您正在将它们写入磁盘。为什么不通过将记录写入磁盘然后分批导入(或者,如有必要,将一些记录写入文件,导入并以较小的批次重复)来简化自己的工作?
-
@JackManey 当我第一次将它们转储到 CSV 文件时,我将它们 两次 写入磁盘?我正在使用事务、prepared statements 和各种 PRAGMA 语句(同步=off,journal_mode=off)来加速这个批量导入,那么 CSV 导入代码使用什么样的魔法来超越这个速度呢?跨度>
-
那么,如果不是从文件中获取这 1000 万条记录,您首先从哪里获得?
标签: database performance sqlite optimization data-structures