sqlite3 performance tuning

太久沒用sqlite, 外加之前使用的地方都是小資料的應用,沒啥必要做tuning,但是這次我的data有1,490,755 (約150萬筆),在這種scale下就發現之前的暴力法,即使有建Index, 還是不夠用了。

測試出來能夠增加效能的方法 (加上下面粗體的三行):

sqlite3_exec(db,"PRAGMA synchronous=OFF;", NULL, 0, &msg);
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, 0, &msg);
sqlite3_exec(db, "YOUR_STATEMENT", NULL, 0, &msg);
剩下的1499998個statements
sqlite3_exec(db, "YOUR_STATEMENT", NULL, 0, &msg);
sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, 0, &msg);

比較結果如下:

INSERT 1.5M筆 record

TUNE之前  每insert 10000筆約3分鐘
TUNE之後  做完1.5M筆record花費 1分13秒

UPDATE 1.5M筆 record

TUNE之前  超級久~~慢到我忍不住按Ctrl+C
TUNE之後  花費10分32秒

結論,INSERT變的超快,UPDATE速度也有顯著提升,不過UPDATE的速度還是不太理想,看到這篇文章的朋友不知道有沒有更好的方法可以分享呢?

本篇發表於 技術 並標籤為 , 。將永久鏈結加入書籤。

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>