2011-10-13 40 views
1

我需要填写一个数据库,数以百万计的记录,我对于目前的常规看起来像:SQLite的:防止碎片

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 

对于查询性能,数据在磁盘上的结构如何?

+0

为什么不直接导入一个csv(或tsv等)文件到表中? – 2011-10-13 17:12:41

+0

@JackManey因为源数据不是这种格式。将它转换为CSV很容易,但我怎么才能导入它,而不必先写入磁盘(瓶颈)? – Muis

+0

如果您将记录插入到SQLite数据库中,那么您**将它们写入磁盘。为什么不通过将记录写入磁盘然后导入一个批次(或者,如果需要,将一些记录写入文件,将其导入并以较小批次重复)来让自己更容易? – 2011-10-13 17:46:03

回答

2

通过使用第二种方法,您将获得一些微小的表现,如果您非常关心考虑这一点。但是这取决于物理磁盘,碎片有多少。

我认为你应该专注于优化你的数据库和查询。

+0

你是对的,但是我花了几个月来优化结构和查询,所以现在是时候继续了;) – Muis