SQLite3性能优化
SQLite3性能调整主要通过pragma指令来实现。 比如调整:空间释放、磁盘同步、Cache大小等。 一.空间释放 PRAGMA auto_vacuum; 含义:查询数据库的auto-vacuum标记。 2.标记含义: auto-vacuum标记的含义: PRAGMA auto_vacuum = 0 | 1; 当开启auto-vacuum,也就是执行pragma auto_vacuum=1; 当提交一个从数据库中删除数据的事务时,数据库文件自动收缩,(VACUUM命令在auto-vacuum开启的数据库中不起作用)。数据库会在内部存储一些信息以便支持这一功能,这使得数据库文件比不开启该选项时稍微大一些。 4.注意事项: 5.建议: 不要打开。也就是“PRAGMA auto_vacuum = 0;”执行命令。 二.缓存大小 PRAGMA cache_size; 查询SQLite一次存储在内存中的数据库文件页数。 每页使用约1.5K内存,缺省的缓存大小是2000.若需要使用改变大量多行的UPDATE或DELETE命令,并且不介意SQLite使用更多的内存的话,可以增大缓存以提高性能。 3.如何设置 PRAGMA cache_size = Number-of-pages; 修改SQLite一次存储在内存中的数据库文件页数。 4.注意事项: 修改为8000,也就是执行命令“PRAGMA cache_size =8000;”即可; 标记含义: 1.注意事项: SQLite3.6.22版本不支持。 2.建议: 打开。也就是执行命令“PRAGMA case_sensitive_like = 1;”命令。不然搜索中文字串会出错。 四.LIKE运算符 正常情况下INSERT,UPDATE和DELETE语句不返回数据。 当开启count-changes,以上语句返回一行含一个整数值的数据——该语句插入,修改或删除的行数。 返回的行数不包括由触发器产生的插入,修改或删除等改变的行数。 打开,便于调试。也就是执行“PRAGMA count_changes = 1;”该命令。 五.页面大小 只有在未创建数据库时才能设置page-size。页面大小必须是2的整数倍且大于等于512小于等于8192。 上限可以通过在编译时修改宏定义SQLITE_MAX_PAGE_SIZE的值来改变。上限的上限是32768。 PRAGMA synchronous; 指令含义:查询"synchronous"标记的设定,返回整数值; 2.如何设置: 3.参数含义: 当synchronous设置为FULL (2),SQLite数据库引擎在紧急时刻会暂停以确定数据已经写入磁盘。这使系统崩溃或电源出问题时能确保数据库在重起后不会损坏。FULL synchronous很安全但很慢。 当synchronous设置为NORMAL,SQLite数据库引擎在大部分紧急时刻会暂停,但不像FULL模式下那么频繁。NORMAL模式下有很小的几率(但不是不存在)发生电源故障导致数据库损坏的情况。但实际上,在这种情况下很可能你的硬盘已经不能使用,或者发生了其他的不可恢复的硬件错误。 设置为synchronous OFF (0)时,SQLite在传递数据给系统以后直接继续而不暂停。若运行SQLite的应用程序崩溃,数据不会损伤,但在系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。另一方面,在synchronous OFF时一些操作可能会快50倍甚至更多。 4.建议: 如果有定期备份的机制,而且少量数据丢失可接受,用OFF。 1.如何查询: 指令含义:查询"temp_store"参数的设置; 2.如何设置: 当temp_store设置为DEFAULT (0),使用编译时的C预处理宏TEMP_STORE来定义储存临时表和临时索引的位置。 当设置为FILE (1),则存放于文件中。temp_store_directorypragma可用于指定存放该文件的目录。 当设置为MEMORY (2),临时表和索引则存放于内存中。 当改变temp_store设置,所有已存在的临时表,索引,触发器及视图将被立即删除。 使用2,即内存模式。 附指令表集: |