SQLite3性能优化_pragma cache_size_tietao的博客-程序员资料

技术标签: cache  sqlite  性能优化  Development  磁盘  数据库  delete  

SQLite3性能调整主要通过pragma指令来实现。

比如调整:空间释放、磁盘同步、Cache大小等。

一.空间释放
1.如何查询:

PRAGMA auto_vacuum;

含义:查询数据库的auto-vacuum标记。

2.标记含义:

auto-vacuum标记的含义:
正常情况下,当提交一个从数据库中删除数据的事务时,数据库文件不改变大小。未使用的文件页被标记并在以后的添加操作中再次使用。这种情况下使用VACUUM命令释放删除得到的空间。但是Vacuum的效率非常低!
3.如何设置:

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.)

点击打开链接

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tietao/article/details/6890350

智能推荐

android之OnGestureListener实现图片的左右滑动_angchanghui2104的博客-程序员资料

先来看看效果图吧welcome_glide.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="ver...

161个Javaweb项目免费_javaweb项目大全_mhs12345的博客-程序员资料

161个javaweb’项目加qq群(105613691)自取。网上一些假货我当时找半天找不到费事而且贼生气。

Android开发-屏幕常亮的方法_android 屏幕常亮_Tan.]der的博客-程序员资料

方法一:xml文件中的顶层布局添加属性在你需要常亮的Activity对应的布局文件中,给需要屏幕常亮的UI组件设置:android:keepScreenOn="true"只要Activity不被停止的话,那么屏幕会一直保持常亮falsh 为关闭android:keepScreenOn="true"方法二:通过添加flag的形式实现//在Window增加flag打开屏幕常亮:getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_S

Centos部署ffmpeg_CopperDong的博客-程序员资料

为了进行小程序silk语音的转码,需要在服务器上配置ffmpeg的环境。接下来我以centos的linux系统作为基础进行介绍配置的操作。配置lamewget https://nchc.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.tar.gz tar -zxvf lame-3.99.tar.gz cd lame-3.99 ./...

IP0_Verilog实现基于双线性插值算法的图像放大IP设计_verilog线性插值_bysg312的博客-程序员资料

Verilog实现基于双线性插值算法的图像放大IP设计本文主要介绍一下verilog实现基于双线性插值算法的图像放大IP的实现思路,最终利用该方法实现了实时的图像放大处理。关于双线性插值的原理,网上有很多讲解的特别好的帖子,本文就不再赘述原理部分,而是重点根据该原理设计硬件实现方案。背景随着各种处理平台的计算能力的逐步提升,人们在各个领域对于视频图像的清晰度以及分辨率要求越来越高,然而有时在...

牛客网 最大值_牛客网 会议的最大_LXY_XYL的博客-程序员资料

链接:https://ac.nowcoder.com/acm/problem/14402来源:牛客网 给出一个序列,你的任务是求每次操作之后序列中 (a[j]-a[i])/(j-i)【1<=i<j<=n】的最大值。操作次数有Q次,每次操作需要将位子p处的数字变成y.输入描述:本题包含多组输入,每组输入第一行一个数字n,表示序列的长度。然后接下来一行输入n个...

随便推点

Mathematica 程序包 package_mathematica程序包_风竹夜的博客-程序员资料

Mathematica 有两种界面,一种是类似matlab的交互式界面叫 kernel,另一种是图文并茂交互界面叫notebook(笔记本)。一般我们都是使用notebook进行计算(Shfit+Enter 运行命令),以下是创建一个程序包的介绍:打开notebook, 打开一个程序包文本:文件->新建->程序包(.wl), 这里要注意,新建的必须为程序包文件,不能是笔记本或者模板笔记本等文件,否

golang time包做时间转换_weixin_41571449的博客-程序员资料

Time类型 Now方法表示现在时间。 func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time 返回现在的时间,func (t Time) Unix() int64将时间转换为unix时间戳,因为duration的限制,所以应该只能计算从1970年开始的250年左右 func...

Halcon找圆系列(1)如何检测圆形_edges_sub_pix 找圆_利白的博客-程序员资料

一、HALCON 12.0例程里有一个类似的,Ctrl+E打开例程,搜measure_circles.hdev,circles.hdev,ball.hdev就行。大概过程差不多是:找到圆形区域--亚像素边缘--结果曲线分段--筛选出圆形--拟合二、要测量一个圆的直径,可以先通过阈值筛选出黑色部分threshold (Rim, Dark, 0, 128),然后将选中部分组合connect......

IMX6ULL嵌入式Linux驱动学习笔记(八)_linux怎样修改每秒的节拍数_路痴的兔子的博客-程序员资料

Linux内核定时器和ioctl函数IMX6ULL嵌入式Linux驱动开发学习Linux内核定时器和ioctl函数定时器使用练手使用`ioctl`函数控制IMX6ULL嵌入式Linux驱动开发学习以下内容是我在学习正点原子IMX6ULL开发板alpha中记录的笔记,部分摘录自正点原子IMX6ULL开发手册。Linux内核定时器和ioctl函数内核时间管理1.1 对于Cortex-M内核来说,一般使用systick硬件定时器作为系统定时器,使用过FreeRTOS等操作系统的也知道,FreeRT

solidity 学习2.批量转账,存入eth。读取数据。_yujunlong3919的博客-程序员资料

pragma solidity ^0.4.17;import 'zeppelin-solidity/contracts/token/ERC20/StandardToken.sol';contract BLEOS is StandardToken { address public owner; string public name = "BL...

使用ion-infinite-scroll不能自动加载数据问题之一:使用了自定义样式overflow-y: auto_ken2999的博客-程序员资料

html文件代码:<ion-content> <div class="brands_list"> <div class="brands" *ngFor="let category of category_list"> {{category}} </div> </div&amp

推荐文章

热门文章

相关标签