2011-10-13 104 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