SQLite 插入大量資料慢的解決方法

2021-08-19 15:29:41 字數 1159 閱讀 7575

sqlite 插入資料很慢的原因:sqlite在沒有顯式使用事務的時候會為每條insert都使用事務操作,而sqlite資料庫是以檔案的形式存在磁碟中,就相當於每次訪問時都要開啟一次檔案,如果對資料進行大量的操作,時間都耗費在i/o操作上,所以很慢。

解決方法是顯式使用事務的形式提交:因為我們開始事務後,進行的大量操作的語句都儲存在記憶體中,當提交時才全部寫入資料庫,此時,資料庫檔案也就只用開啟一次。

我在沒有顯式使用事務形式插入100條資料時用了12.226s;用顯式事務形式,插入100條只用了0.172s,插入1000000條也才34.891s,相關很大吧。

顯式使用事務的例子:

#include #include 

using

namespace

std;

#include

"sqlite/sqlite3.h

"int

main()

else

char*errmsg;

nresult = sqlite3_exec(db,"

create table ****(id integer primary key autoincrement,name varchar(100))

",null,null,&errmsg);

if (nresult !=sqlite_ok)

string

strsql;

strsql+="

begin;\n";

for (int i=0;i<100;i++)

strsql+="

commit;";

//coutgetlocaltime(&tm_s);

nresult = sqlite3_exec(db,strsql.c_str(),null,null,&errmsg);

systemtime tm_e;

getlocaltime(&tm_e);

if (nresult !=sqlite_ok)

cout

<<"

start:

"<":"

<":"

cout

<<"

end :

"<":"

<":"

return0;

}

SQLite 插入大量資料慢的解決方法

sqlite 插入資料很慢的原因 sqlite在沒有顯式使用事務的時候會為每條insert都使用事務操作,而sqlite資料庫是以檔案的形式存在磁碟中,就相當於每次訪問時都要開啟一次檔案,如果對資料進行大量的操作,時間都耗費在i o操作上,所以很慢。解決方法是顯式使用事務的形式提交 因為我們開始事務...

sqlite大量資料插入優化總結

1.將插入操作放到乙個transaction裡,預設的每條insert語句都會開啟乙個transaction,參見 2.手動拼寫插入語句,不要運用orm,雖然 會看起來很多,但是效率絕對大幅度提公升 未優化前 nsarray organizations organizationsdic allval...

Python使用SQLite插入大量資料耗時問題

使用python爬蟲 ip時,最先使用了sqlite作為儲存ip資料庫,sqlite簡單 靈活 輕量 開源,和檔案系統一樣。而當大量插入爬取的資料時,出現了嚴重的耗時,檢視一起資料後,發現 sqlite在每條insert都使用commit的時候,就相當於每次訪問時都要開啟一次檔案,從而引起了大量的i...