SQLite 性能优化

摘要:
SQLite性能优化主要通过pragma指令实现。每个页面使用大约1.5K内存,默认缓存大小为2000。如果需要使用UPDATE或DELETE命令来更改大量行,并且不介意SQLite使用更多内存,可以增加缓存以提高性能。当synchronous设置为FULL时,SQLite数据库引擎将在紧急情况下暂停,以确保数据已写入磁盘。当它设置为synchronousOFF OFF时,SQLite将在向系统传递数据后不暂停地继续。如果运行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)

查询或更改"temp_store"参数的设置。当temp_store设置为DEFAULT (0),使用编译时的C预处理宏 TEMP_STORE来定义储存临时表和临时索引的位置。当设置为MEMORY (2)临时表和索引存放于内存中。 当设置为FILE (1)则存放于文件中。temp_store_directorypragma 可用于指定存放该文件的目录。当改变temp_store设置,所有已存在的临时表,索引,触发器及视图将被立即删除。



原文链接:http://www.cnblogs.com/snow365/archive/2008/07/08/1238395.html

免责声明:文章转载自《SQLite 性能优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AlphaPose论文笔记《RMPE: Regional Multi-person Pose Estimation》springboot-easycode配置文件修改下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PostgreSQL操作-psql基本命令

一、命令说明psql是PostgreSQL的交互终端,等同于Oracle中的sqlplus。执行该命令连接数据库时, 默认的用户和数据库是postgres二、命令参数-c 命令 :指定psql执行一条SQL命令(用双引号括起),执行后退出。-d 数据库名 :待连接的数据库名称。-f 文件名 :使用文件中的数据作为命令的输入源,在处理完文件后,psql结束并...

sqlite3 on python for newbies

python 集成了 sqlite3 ,其接口很简单: import sqlite3 db_connection = sqlite3.connect(db_filename) db_cursor = db_connection.cursor() db_cursor.execute('select * from tt') result_one = db_cu...

备份与恢复概述,冷备,热备

对于DBA来说,最基本的工作就是数据库的备份与恢复,在意外情况下(如服务器宕机、磁盘损坏等)要保证数据不丢失,或者是最小程度地丢失。每个DBA应该每时每刻都关心自己所负责的数据库的备份情况。MySQL数据库提供的大多数工具(如mysqldump、ibbackup、replication)都能很好地完成备份的工作,当然也可以通过第三方的一些工具来完成,如xt...

SQL Server 连接字符串和身份验证

在做数据开发的时候,常常需要用到数据库连接字符串,很多时候都不知道连接字符串中每个字段的具体含义,今天就在这里总结一下,方便以后使用。下面就用一个简单的例子开始 Data Source=(local); Database=WebDB; User ID=WebUser; Password=WebUser; pooling=true; min pool siz...

Win8.1安装配置64位Oracle Database 11g的详细图文步骤记录

一、安装建议 在开始Oracle数据安装之前建议:1.关闭本机的病毒防火墙。2.断开互联网。这样可以避免解压缩丢失文件和安装失败。 二、安装包准备 Step1 Oracle官网下载好Windows系统64位的安装包。 Step2 文件解压后有两个压缩包“win64_11gR2_database_1of2.zip”“win64_11gR2_database_...

Sqlmap注入技巧收集整理

TIP1 当我们注射的时候,判断注入 http://site/script?id=10http://site/script?id=11-1 # 相当于 id=10http://site/script?id=(select 10) # 相当于 id=10 http://site/script?id=10 and 1=1 #失败 通过判断可发现and和or被过...