太久沒用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的速度還是不太理想,看到這篇文章的朋友不知道有沒有更好的方法可以分享呢?
0 Response to “sqlite3 performance tuning”