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