作者: luckiejacky 時間: 2016-11-6 09:58 標題: 怎樣加快sqlite3的閲讀速度?
想讀一個1,000,000隻record的DB
最好15秒內完成....
THX
作者: pekkle 時間: 2016-11-6 20:50
load 入 memory 應該會快啲呱
作者: winstercafe 時間: 2016-11-6 20:58
佢個 case 似乎要計埋由 disk 抄落 ram 既時間
應該 ssd 都要考慮
但係唔知讀完有咩用
Loop 讀緊既時候要做乜
sequential read 似乎無必要用 sqlite...
作者: pekkle 時間: 2016-11-6 21:08
佢個 case 似乎要計埋由 disk 抄落 ram 既時間
應該 ssd 都要考慮
但係唔知讀完有咩用
Loop 讀緊既時候要 ...
winstercafe 發表於 2016-11-6 20:58
啱,樓主冇講清楚想做乜,好難搞。齋load個大DB做乜?要select record快其實係要tune條sql好啲。
作者: luckiejacky 時間: 2016-11-6 22:03
本帖最後由 luckiejacky 於 2016-11-6 22:15 編輯
Sorry 我搞錯左
原來個program是OK的
原本個db都唔系load得好慢
我只是試下從Visual Studio 2010 compile試下work唔work
但我發現個select query停左在32768 records
為什麼呢?
- int rc;
- std::string sql = "SELECT * from Costs";
- sqlite3_stmt *stmt = NULL;
- rc = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, NULL);
- if (rc != SQLITE_OK)
- throw string(sqlite3_errmsg(db));
- rc = sqlite3_step(stmt);
- long row = 0;
- while (rc == SQLITE_ROW)
- {
- int a = sqlite3_column_int(stmt, 0);
- int b = sqlite3_column_int(stmt, 1);
- float c = sqlite3_column_double(stmt, 2);
- cout << "Row " << row++ << " " << "\r";
- NodePair p(a, b);
- costs.insert(std::make_pair(p, c));
- rc = sqlite3_step(stmt);
- if (rc != SQLITE_ROW && rc != SQLITE_DONE) {
- string errmsg(sqlite3_errmsg(db));
- sqlite3_finalize(stmt);
- cout << "Error Reading Costs" << endl;
- throw errmsg;
- }
- }
- sqlite3_finalize(stmt);
THX
作者: pekkle 時間: 2016-11-7 07:56
回覆 5# luckiejacky RC 係 int?
作者: 7h1r733n 時間: 2016-11-7 15:04
佢明明寫左rc係int.. 咁rc當然係int...

作者: pekkle 時間: 2016-11-7 15:09
回覆 7# 7h1r733n
int 32768 正常吖
作者: 7h1r733n 時間: 2016-11-7 15:23
但佢話visual c++.. visual c++ int好似係4byte..
https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx
作者: pekkle 時間: 2016-11-7 16:36
係喎,睇錯咗
作者: luckiejacky 時間: 2016-11-7 18:37
Sorry
原來個hashing function
有問題
個unordered map去到100,000隻record (32768 passed)
就好多collision

