初用sqlite3插入資料時,插入每條資料大概需要100ms左右。如果是大量匯入,可以引進事物提高速度。但是假設你的業務是每間隔幾秒插入幾條資料,顯然100ms是不能容許的。解決辦法是,在調用sqlite3_open函數後添加下面一行代碼:
sqlite3_exec(db, "PRAGMA synchronous = OFF; ", 0,0,0);
上面的解決辦法貌似治標不治本,為什麼加上上面的程式碼,速度會提高那麼多?網上解釋如下:
磁碟同步
1.如何設定:
PRAGMA synchronous = FULL; (2)
PRAGMA synchronous = NORMAL; (1)
PRAGMA synchronous = OFF; (0)
2.參數含義:
當synchronous設定為FULL (2), SQLite資料庫引擎在緊急時刻會暫停以確定資料已經寫入磁碟。這使系統崩潰或電源出問題時能確保資料庫在重起後不會損壞。FULL synchronous很安全但很慢。
當synchronous設定為NORMAL, SQLite資料庫引擎在大部分緊急時刻會暫停,但不像FULL模式下那麼頻繁。 NORMAL模式下有很小的幾率(但不是不存在)發生電源故障導致資料庫損壞的情況。但實際上,在這種情況 下很可能你的硬碟已經不能使用,或者發生了其他的不可恢複的硬體錯誤。
設定為synchronous OFF (0)時,SQLite在傳遞資料給系統以後直接繼續而不暫停。若運行SQLite的應用程式崩潰, 資料不會損傷,但在系統崩潰或寫入資料時意外斷電的情況下資料庫可能會損壞。另一方面,在synchronous OFF時 一些操作可能會快50倍甚至更多。在SQLite 2中,預設值為NORMAL.而在3中修改為FULL。
3.建議:
如果有定期備份的機制,而且少量資料丟失可接受,用OFF。
注意上面紅色加粗的字樣。總結:如果你的資料對安全性完整性等要求不是太高,可以採用設定為0的方法,畢竟只是“資料庫可能會損壞”,至於損壞幾率為多大,筆者也暫不知曉。。。。。。還沒遇到過損壞,不知什麼時候才會發生。