論述:SQLite3性能優化1-系統設置方便

SQLite3性能優化

 

SQLite3性能調整主要經過pragma指令來實現。數據庫

好比調整:空間釋放、磁盤同步、Cache大小等。緩存

一.空間釋放
1.如何查詢:
安全

PRAGMA auto_vacuum;性能優化

含義:查詢數據庫的auto-vacuum標記。性能

2.標記含義:優化

auto-vacuum標記的含義:
正常狀況下,當提交一個從數據庫中刪除數據的事務時,數據庫文件不改變大小。未使用的文件頁被標記並在之後的添加操做中再次使用。這種狀況下使用VACUUM命令釋放刪除獲得的空間。可是Vacuum的效率很是低!
3.如何設置:spa

PRAGMA auto_vacuum = 0 | 1;調試

當開啓auto-vacuum,也就是執行pragma auto_vacuum=1;索引

當提交一個從數據庫中刪除數據的事務時,數據庫文件自動收縮, (VACUUM命令在auto-vacuum開啓的數據庫中不起做用)。數據庫會在內部存儲一些信息以便支持這一功能,這使得 數據庫文件比不開啓該選項時稍微大一些。事務

4.注意事項:
只有在數據庫中未建任何表時才能改變auto-vacuum標記。試圖在已有表的狀況下修改不會致使報錯。

5.建議:

不要打開。也就是「PRAGMA auto_vacuum = 0;」執行命令。

二.緩存大小
1.如何查詢:

PRAGMA cache_size;

查詢SQLite一次存儲在內存中的數據庫文件頁數。

2.標記含義:

每頁使用約1.5K內存,缺省的緩存大小是2000. 若須要使用改變大量多行的UPDATE或DELETE命令,而且不介意SQLite使用更多的內存的話,能夠增大緩存以提升性能。

3.如何設置

PRAGMA cache_size = Number-of-pages;

修改SQLite一次存儲在內存中的數據庫文件頁數。

4.注意事項:


當使用cache_size pragma改變緩存大小時,改變僅對當前對話有效,當數據庫關閉從新打開時緩存大小恢復到缺省大小。要想永久改變緩存大小,使用default_cache_size pragma.

5.建議:

修改成8000,也就是執行命令「PRAGMA cache_size =8000;」便可;
三.LIKE運算符
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'依然爲真。

1.注意事項:

SQLite3.6.22版本不支持。

2.建議:

打開。也就是執行命令「PRAGMA case_sensitive_like = 1;」命令。否則搜索中文字串會出錯。

四.LIKE運算符
PRAGMA count_changes; 
PRAGMA count_changes = 0 | 1;
查詢或更改count-changes標記。

正常狀況下INSERT, UPDATE和DELETE語句不返回數據。

當開啓count-changes,以上語句返回一行含一個整數值的數據——該語句插入,修改或刪除的行數。

1.注意事項:

返回的行數不包括由觸發器產生的插入,修改或刪除等改變的行數。

2.建議:

打開,便於調試。也就是執行「PRAGMA count_changes = 1;」該命令。

五.頁面大小
PRAGMA page_size; 
PRAGMA page_size = bytes;
查詢或設置page-size值。

1.注意事項:

只有在未建立數據庫時才能設置page-size。頁面大小必須是2的整數倍且大於等於512小於等於8192。

上限能夠經過在編譯時修改宏定義SQLITE_MAX_PAGE_SIZE的值來改變。上限的上限是32768。
六.磁盤同步
1.如何查詢:

PRAGMA synchronous;

指令含義:查詢"synchronous"標記的設定,返回整數值;

2.如何設置:
PRAGMA synchronous = FULL; (2) 
PRAGMA synchronous = NORMAL; (1) 
PRAGMA synchronous = OFF; (0)

3.參數含義:

當synchronous設置爲FULL (2), SQLite數據庫引擎在緊急時刻會暫停以肯定數據已經寫入磁盤。這使系統崩潰或電源出問題時能確保數據庫在重起後不會損壞。FULL synchronous很安全但很慢。

當synchronous設置爲NORMAL, SQLite數據庫引擎在大部分緊急時刻會暫停,但不像FULL模式下那麼頻繁。 NORMAL模式下有很小的概率(但不是不存在)發生電源故障致使數據庫損壞的狀況。但實際上,在這種狀況 下極可能你的硬盤已經不能使用,或者發生了其餘的不可恢復的硬件錯誤。

設置爲synchronous OFF (0)時,SQLite在傳遞數據給系統之後直接繼續而不暫停。若運行SQLite的應用程序崩潰, 數據不會損傷,但在系統崩潰或寫入數據時意外斷電的狀況下數據庫可能會損壞。另外一方面,在synchronous OFF時 一些操做可能會快50倍甚至更多。
在SQLite 2中,缺省值爲NORMAL.而在3中修改成FULL。

4.建議:

若是有按期備份的機制,並且少許數據丟失可接受,用OFF。
七.內存模式

1.如何查詢:
PRAGMA temp_store;

指令含義:查詢"temp_store"參數的設置;

2.如何設置:
PRAGMA temp_store = DEFAULT; (0) 
PRAGMA temp_store = FILE; (1) 
PRAGMA temp_store = MEMORY; (2)

3.參數含義:

當temp_store設置爲DEFAULT (0),使用編譯時的C預處理宏 TEMP_STORE來定義儲存臨時表和臨時索引的位置。

當設置爲FILE (1),則存放於文件中。temp_store_directorypragma 可用於指定存放該文件的目錄。

當設置爲MEMORY (2),臨時表和索引則存放於內存中。

4.注意事項:

當改變temp_store設置,全部已存在的臨時表,索引,觸發器及視圖將被當即刪除。

5.建議:

使用2,即內存模式。

附指令表集:

序號

指令

含義

缺省值

1

auto_vacuum

空間釋放

0

2

cache_size

緩存大小

2000

3

case_sensitive_like

LIKE大小寫敏感

(注意:SQLite3.6.22不支持)

4

count_changes

變動行數

0

5

page_size

頁面大小

1024

6

synchronous

硬盤大小

2

7

temp_store;

內存模式

0

(End.)

相關文章
相關標籤/搜索