解決sqlite3插入資料很慢的問題

2022-02-09 05:18:42 字數 1048 閱讀 6062

初用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的方法,畢竟只是「資料庫可能會損壞」,至於損壞機率為多大,筆者也暫不知曉。。。。。。還沒遇到過損壞,不知什麼時候才會發生。

解決sqlite3插入資料很慢的問題

初用sqlite3插入資料時,插入每條資料大概需要100ms左右。如果是批量匯入,可以引進事物提高速度。但是假設你的業務是每間隔幾秒插入幾條資料,顯然100ms是不能容許的。解決辦法是,在呼叫sqlite3 open函式後新增下面一行 sqlite3 exec db,pragma synchrono...

sqlite3 資料同步

在乙個小專案中,用到 sqlite3 需要同步兩個表,懶得裝工具,寫了兩個函式搞掂。貼 出來給需要的朋友。encoding utf 8 author 陳年椰子 contact hndm qq.com version 1.0 file workdb.py time 2019 6 18 17 32 說明...

使用sqlite3 模組操作sqlite3資料庫

python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...