4
我一直在努力讓sqlite在我的C++程序中快得多。我相信結果遠不如預期的。SQLite真的很慢
我在數據庫中有幾張表,其中大多數有幾條記錄,另一條有很多記錄(4986450)。要達到這個尺寸真的很難,因爲每次交易的插入次數太多,而且插入太慢。
在另一方面,我現在對大表做一個簡單的查詢,如
sqlite3_prepare_v2(db,"SELECT * FROM Table where primary_key=?1;",-1, &query,NULL);
sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, &sErrMsg);
....
while(running){
sqlite3_bind_text(query, 1, pkey.c_str(), (int)pkey.size() , SQLITE_STATIC);
int query_status = sqlite3_step(query);
if(query_status == SQLITE_ROW){
data = sqlite3_column_int(query,1);
(... just saving data in a map)
}
}
sqlite3_exec(db, "END TRANSACTION", NULL, NULL, &sErrMsg);
(我已經改變表和列的名字只是爲了簡單)。 這個查詢是在一段時間的cicle中,並且在同一個事務中做了很多次。選擇查詢需要大約9秒鐘的時間。即使我將數據插入表格,我也可以獲得更好的時間。
我有數據庫
PRAGMA main.page_size = 4096;
PRAGMA main.cache_size=10000;
PRAGMA main.locking_mode=EXCLUSIVE;
PRAGMA main.synchronous=OFF;
PRAGMA main.journal_mode=WAL;
PRAGMA main.cache_size=5000;
你能幫我tunning對數據庫以下編譯?我究竟做錯了什麼?
出於好奇,當'(...只是將數據保存在列表中)'完全被*註釋掉時,性能如何? – WhozCraig
可能對您感興趣:[那些](http://stackoverflow.com/a/2929821/2302862)[two](http://stackoverflow.com/a/8888410/2302862)答案。 – Siguza
@WhozCraig對不起,我的意思是地圖。這幾乎是同一時間。 – anatp2015