sqlite 插入資料很慢的原因:sqlite在沒有顯式使用事務的時候會為每條insert都使用事務操作,而sqlite資料庫是以檔案的形式存在磁碟中,就相當於每次訪問時都要開啟一次檔案,如果對資料進行大量的操作,時間都耗費在i/o操作上,所以很慢。
解決方法是顯式使用事務的形式提交:因為我們開始事務後,進行的大量操作的語句都儲存在記憶體中,當提交時才全部寫入資料庫,此時,資料庫檔案也就只用開啟一次。
我在沒有顯式使用事務形式插入100條資料時用了12.226s;用顯式事務形式,插入100條只用了0.172s,插入1000000條也才34.891s,相關很大吧。
顯式使用事務的例子:
#include #includeusing
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...