sqlite研究——效能優化
很多人直接就使用了,並未注意到sqlite也有配置引數,可以對效能進行調整。有時候,產生的結果會有很大影響。
主要通過pragma指令來實現。
比如: 空間釋放、磁碟同步、cache大小等。
不要開啟。前文提高了,vacuum的效率非常低!
pragma auto_vacuum;
pragma auto_vacuum = 0 | 1;
查詢或設定資料庫的auto-vacuum標記。
正常情況下,當提交乙個從資料庫中刪除資料的事務時,資料庫檔案不改變大小。未使用的檔案頁被標記並在以後的新增操作中 再次使用。這種情況下使用vacuum命令釋放刪除得到的空間。
當開啟auto-vacuum,當提交乙個從資料庫中刪除資料的事務時,資料庫檔案自動收縮, (vacuum命令在auto-vacuum開啟的資料庫中不起作用)。資料庫會在內部儲存一些資訊以便支援這一功能,這使得 資料庫檔案比不開啟該選項時稍微大一些。
只有在資料庫中未建任何表時才能改變auto-vacuum標記。試圖在已有表的情況下修改不會導致報錯。
建議改為8000
pragma cache_size;
pragma cache_size = number-of-pages;
查詢或修改sqlite一次儲存在記憶體中的資料庫檔案頁數。每頁使用約1.5k記憶體,預設的快取大小是2000. 若需要使用改變大量多行的update或delete命令,並且不介意sqlite使用更多的記憶體的話,可以增大快取以提高效能。
當使用cache_size pragma改變快取大小時,改變僅對當前對話有效,當資料庫關閉重新開啟時快取大小恢復到預設大小。 要想永久改變快取大小,使用default_cache_size pragma.
開啟。不然搜尋中文字串會出錯。
pragma case_sensitive_like;
pragma case_sensitive_like = 0 | 1;
like運算子的預設行為是忽略latin1字元的大小寫。因此在預設情況下'a' like 'a'的值為真。可以通過開啟 case_sensitive_like pragma來改變這一預設行為。當啟用case_sensitive_like,'a' like 'a'為假而 'a' like 'a'依然為真。
開啟。便於除錯
pragma count_changes;
pragma count_changes = 0 | 1;
查詢或更改count-changes標記。正常情況下insert, update和delete語句不返回資料。 當開啟count-changes,以上語句返回一行含乙個整數值的資料——該語句插入,修改或刪除的行數。 返回的行數不包括由觸發器產生的插入,修改或刪除等改變的行數。
pragma page_size;
pragma page_size = bytes;
查詢或設定page-size值。只有在未建立資料庫時才能設定page-size。頁面大小必須是2的整數倍且大於等於512小於等於8192。 上限可以通過在編譯時修改巨集定義sqlite_max_page_size的值來改變。上限的上限是32768.
如果有定期備份的機制,而且少量資料丟失可接受,用off
pragma synchronous;
pragma synchronous = full; (2)
pragma synchronous = normal; (1)
pragma synchronous = off; (0)
查詢或更改"synchronous"標記的設定。第一種形式(查詢)返回整數值。 當synchronous設定為full (2), sqlite資料庫引擎在緊急時刻會暫停以確定資料已經寫入磁碟。 這使系統崩潰或電源出問題時能確保資料庫在重起後不會損壞。full synchronous很安全但很慢。 當synchronous設定為normal, sqlite資料庫引擎在大部分緊急時刻會暫停,但不像full模式下那麼頻繁。 normal模式下有很小的機率(但不是不存在)發生電源故障導致資料庫損壞的情況。但實際上,在這種情況 下很可能你的硬碟已經不能使用,或者發生了其他的不可恢復的硬體錯誤。 設定為synchronous off (0)時,sqlite在傳遞資料給系統以後直接繼續而不暫停。若執行sqlite的應用程式崩潰, 資料不會損傷,但在系統崩潰或寫入資料時意外斷電的情況下資料庫可能會損壞。另一方面,在synchronous off時 一些操作可能會快50倍甚至更多。
在sqlite 2中,預設值為normal.而在3中修改為full.
使用2,記憶體模式。
pragma temp_store;
pragma temp_store = default; (0)
pragma temp_store = file; (1)
pragma temp_store = memory; (2)
經測試,在類bbs應用上,通過以上調整,效率可以提高2倍以上。
SQLite效能優化
最近做了乙個專案,在系統啟動時會更新幾千條資料,剛開始就使用最簡單的寫法,直接的insert,delete,導致這個更新過程進行了300多秒,後來經查得知在處理大量資料的時候新增上事務管理,會大大的提高效能,隨後就查閱資料如何來新增事務管理。這ios的sqlite和android上面的語法真是相差很...
sqlite 效能優化
比如 空間釋放 磁碟同步 cache大小等。不要開啟。前文提高了,vacuum的效率非常低!pragma auto vacuum pragma auto vacuum 0 1 查詢或設定資料庫的auto vacuum標記。正常情況下,當提交乙個從資料庫中刪除資料的事務時,資料庫檔案不改變大小。未使用...
sqlite效能優化1
建立索引的基本語法如下 create index index name on table name column name,間接索引 定義主鍵約束或者唯一性約束,可以間接建立索引,主鍵預設為唯一約束.所 有不需要再建立索引,以免造成浪費.注意事項 1.建立索引會增加資料庫的大小.2.對於insert...