SQLite(2)——性能

追加sql知识来啦~~

只是介绍一些我知道的哦~~

1. 数据库性能设置

(1)PRAGMA journal_mode = DELETE;

WAL(7500)写入数据的时候会将数据先写入到WAL文件中,然后异步地将数据写入到数据库中,提高写入数据的性能,减少锁冲突,但是会占用更多的系统内存,使用WAL模式还需要在关闭数据库之前对WAL文件进行清理,才能保证不会有数据损失。
TRUNCATE(5000)日志截断为零字节长度。
MEMORY(600)不安全,日志记录保留在内存中,而不是磁盘上。
OFF(500)不安全,不保留任何日志记录。
PERSIST(4000)日志文件保留,头部重写,表明日志不再有效。
DELETE(8000)

默认模式,事务结束时,日志文件将被删。

(2)PRAGMA synchronous = NORMAL;

OFF(0)不同步,系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。
NORMAL(1)在事务提交之前,将事务日志写入磁盘。在将数据页更新至磁盘之前,要求操作系统将缓存的数据页写入磁盘。(数据只写入磁盘一次 宕机最近修改的数据可能会丢失)NORMAL模式下有很小的几率(但不是不存在)发生电源故障导致数据库损坏的情况。
FULL(2)

在事务提交之前,将事务日志写入磁盘。在将数据页更新至磁盘之前,同步操作系统缓存的所有文件写入磁盘。(数据写入磁盘多次,相对更安全,紧急时刻保证数据写入磁盘,系统崩溃保证数据库不会损坏,但是写入速度会稍慢一些)。

 

(3)PRAGMA temp_store = FILE;

临时表存储到内存可以提高访问速度,内存空间不足部分临时表会自动被存储到磁盘,需要合理使用内存防止内存溢出 !!!

DEFAULT(0)默认使用编译时的模式。通常是 FILE。
FILE(1)使用基于文件的存储。
MEMORY(2)使用基于内存的存储。

(4)PRAGMA page_size = 32768;

页面大小 数据库最基础的物理单位 sqlite支持范围512-65536
页面越大支持一次读写的数据越多 占用内存变高 减少写磁盘次数

(5)PRAGMA cache_size = 8000;

数据库缓存大小
        从缓存中读取提高速度 缓存过大会占用系统内存 降低系统性能
        缓存实际包括:页面缓存和语句缓存
        页面缓存:缓存数据库的页面数据(PRAGMA cache_size设置)
        语句缓存:缓存sql语句的解析结果(PRAGMA cache_spill设置) 

2. 数据库查询速度提升——索引 

 (1)指定索引优化

        --------------------------
		|table_key	table_value	 |
		|	1			value1	 |
		|	2			value1	 |
        |	3			value1	 |
        |	4			value1	 |
        |	...			...  	 |
		--------------------------
CREATE INDEX IF NOT EXISTS table_key_index ON table_name(table_key DESC);
    
SELECT * FROM table_name INDEXED BY table_key_index WHERE table_value = value1 AND table_key < 10000 ORDER BY table_key DESC LIMIT 1;

当数据库数据量巨大且在sql中出现排序等条件时,数据库速度会变慢,此时对WHRER后的关键条件添加索引(如上table_key添加索引名为table_key_index)后再根据table_key排序时效率将会变高。

(2)联合索引优化

CREATE INDEX IF NOT EXISTS key_value_index ON table_name(table_key,table_value DESC);

同一个表创建多索引时,在一个查询语句的WHERE条件中有多个索引列会导致该查询语句不确定使用哪个索引,有可能会使用慢索引使查询时间更长,可以通过INDEXED BY [索引名] WHERE *** 指定最快的索引 或 使用NOT INDEXED WHERE指定查询不使用索引。

例如上边的表添加了联合索引,仍然可以使用上边的INDEXED BY table_key_index WHERE指定使用key索引。


推荐一个工具Navicat,是我使用过的可视化数据库工具,相对来说比较好用,它的优点就是能打开加密数据库,用起来也比较简单,不知道用什么的新手可试一下~~ 

Navicat Premium下载链接

SQLite(1)——sql语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值