Board logo

標題: 怎樣加快sqlite3的閲讀速度? [打印本頁]

作者: 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

load 入 memory 應該會快啲呱
pekkle 發表於 2016-11-6 20:50

佢個 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
為什麼呢?
  1.         int rc;
  2.         std::string sql = "SELECT * from Costs";

  3.         sqlite3_stmt *stmt = NULL;
  4.         rc = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, NULL);
  5.         if (rc != SQLITE_OK)
  6.                 throw string(sqlite3_errmsg(db));


  7.         rc = sqlite3_step(stmt);
  8.         long row = 0;
  9.         while (rc == SQLITE_ROW)
  10.         {                 
  11.                 int a = sqlite3_column_int(stmt, 0);
  12.                 int b = sqlite3_column_int(stmt, 1);
  13.                 float c = sqlite3_column_double(stmt, 2);

  14.                 cout << "Row " << row++ << "              " << "\r";

  15.                 NodePair p(a, b);

  16.                 costs.insert(std::make_pair(p, c));

  17.                 rc = sqlite3_step(stmt);
  18.                 if (rc != SQLITE_ROW && rc != SQLITE_DONE) {
  19.                         string errmsg(sqlite3_errmsg(db));
  20.                         sqlite3_finalize(stmt);
  21.                         cout << "Error Reading Costs" << endl;
  22.                         throw errmsg;
  23.                 }

  24.         }

  25.         sqlite3_finalize(stmt);
複製代碼


THX
作者: pekkle    時間: 2016-11-7 07:56

回覆 5# luckiejacky RC 係 int?
作者: 7h1r733n    時間: 2016-11-7 15:04

回覆  luckiejacky RC 係 int?
pekkle 發表於 2016-11-7 07:56


佢明明寫左rc係int.. 咁rc當然係int...
作者: pekkle    時間: 2016-11-7 15:09

回覆 7# 7h1r733n

int 32768 正常吖
作者: 7h1r733n    時間: 2016-11-7 15:23

回覆  7h1r733n

int 32768 正常吖
pekkle 發表於 2016-11-7 15:09

但佢話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





歡迎光臨 電腦領域 HKEPC Hardware (https://www.hkepc.com/forum/) Powered by Discuz! 7.2