2010-01-12 28 views
4

什麼是填充從數據表SQLite數據庫在C#.NET 2.什麼是從一個DataTable

每一行目前我建立插入statments表中以最快的方式填充SQLite表最快的方法。我試過了一個dataadaptor,但速度似乎沒有更快。目前需要5分鐘循環20000行並將它們寫入數據庫。 任何sugestions?

解決方案:

我發現surounding插入statments塊與BEGIN ... COMMIT爲我工作的一個顯着的速度提升:

BEGIN; 
INSERT INTO friends (name1,name2) VALUES ('john','smith'); 
INSERT INTO friends (name1,name2) VALUES ('jane','doe'); 
COMMIT; 

我的INSERT語句是大約500字節每個,所以我將發言次數限制爲每次交易100次。

回答

3

請參閱從SQLite的網站這個FAQ條目:

http://www.sqlite.org/faq.html#q19

默認情況下,每一個INSERT語句是它自己的事務。但是,如果使用BEGIN ... COMMIT包圍多個INSERT語句,則所有插入操作都會分組到一個事務中。提交事務所需的時間將在所有隨附的插入語句中攤銷,因此每個插入語句的時間會大大減少。

+0

有趣。我想知道BEGIN ... COMMIT塊包含多少條語句 – fishhead 2010-01-12 23:20:56

+0

您可以使用7200 RPM硬盤每秒執行60次事務。將您的寫入速度(例如5MB/s)除以60以獲得每個事務的字節數,然後將其除以您的記錄大小以獲得每次事務的插入次數。 – 2010-01-12 23:24:57

+0

似乎是使用開始和提交的好方法 – Thunder 2010-01-13 05:28:08

1

參見this thread

最好的方法是使用ExecuteNonQuery(),它一次提交所有的插入,並且不必一直分配字符串。 20,000行應該花費不到一分鐘的時間。

相關問題