`
hrl_100_eyejava
  • 浏览: 24477 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】sqlite性能优化

    博客分类:
  • db
 
阅读更多

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

分享到:
评论

相关推荐

    SQLite3的性能优化

    SQLite3 的性能优化 SQLite3 是一个轻量级的关系数据库管理系统,常用于嵌入式系统中。在嵌入式系统中,数据库的性能优化尤为重要。本文将主要讲述在嵌入式中使用 SQLite3 时,对相关的数据库的性能如何优化的问题...

    SQLite3性能优化

    提供的压缩包文件中,"SQLite3性能优化 - tietao的专栏 - 博客频道 - CSDN_NET.mht"和"SQLite 优化笔记 eph's blog.mht"可能包含更多关于SQLite3性能优化的实战经验和案例,值得深入阅读。"sqlite-doc-3071300.zip...

    Android开发环境中的SQLite性能优化.pdf

    "Android开发环境中的SQLite性能优化" 在 Android 开发环境中,SQLite 是一个非常流行的嵌入式数据库管理系统。为了提高 SQLite 的性能和资源占用,我们可以通过两种方法进行优化:使用事务和使用索引。 首先,让...

    C# SQLite执行效率的优化教程

    C# SQLite执行效率优化教程 本文主要介绍了关于C# SQLite执行效率优化的相关资料,通过示例代码介绍的非常详细,对大家学习或者使用C# SQLite具有一定的参考学习价值。 一、SQLite简介 SQLite是一款轻型的嵌入式...

    sqlite3性能优化源代码 数据插入 开启事务 执行准备 性能提升 每秒百万条数据写入

    在本文中,我们将深入探讨如何通过优化SQLite3的源代码来提高数据插入性能,尤其是如何利用事务和执行准备来实现每秒百万条数据的写入速度。 首先,了解SQLite3的事务机制是至关重要的。在SQLite3中,事务用于确保...

    SQLServer转SQLite源码

    综合以上,这个“SQLServer转SQLite源码”项目涵盖了数据库系统、数据迁移技术、编程语言应用、数据库架构理解和性能优化等多个方面的知识。通过分析和学习这份源码,开发者可以深入了解数据库迁移的细节,以及两种...

    sqlite 优化资料

    三、SQLite性能优化 1. 索引优化:为频繁查询的字段建立索引可以显著提升查询速度。SQLite支持唯一索引、主键索引、全文索引等不同类型的索引。 2. 查询优化:避免在WHERE子句中使用不等于(!=)或不包含(NOT IN)...

    sqlite优化方法比较

    SQLite优化对于提升应用性能至关重要,尤其是在处理大量数据或频繁读写操作时。以下是一些关于SQLite优化的关键知识点: 1. **数据库设计优化**: - **表结构设计**:合理设计数据库表结构,包括选择合适的数据...

    pbootcms数据sqlite转mysql数据库

    5. **性能优化**:MySQL提供多种性能优化策略,包括存储引擎的选择(如InnoDB),索引设计,查询优化等。 6. **安全考虑**:在迁移过程中,确保遵循最佳实践,保护数据安全,比如设置强密码,限制数据库用户的访问...

    mysql 转到 sqlite

    在实际操作中,可能还需要考虑备份、性能优化、用户权限等问题。对于大型数据库,可能需要分批迁移,以减少一次性处理大量数据的压力。迁移完成后,记得更新应用程序中的数据库连接设置,以指向新的SQLite数据库。

    C# sqlite 批量更新及性能测试

    本文将深入探讨如何在C#中进行SQLite批量更新操作,并对其进行性能测试,以便优化数据库处理效率。 首先,我们需要引入SQLite的.NET数据提供程序,这通常通过NuGet包管理器来实现。安装`System.Data.SQLite`库后,...

    SQLite 性能优化实例分享

    通过上述优化,开发者成功地解决了性能问题,但同时也提醒我们,对于数据库性能优化,不仅要关注代码层面的改进,还要考虑硬件环境、数据库设计和使用场景等因素。在实际项目中,应当根据具体情况进行综合优化,确保...

    windows下sqlite安装使用和性能优化及设置

    通过以上步骤,你可以成功地在 Windows 系统下安装并使用 SQLite 数据库,并通过调整相关参数实现性能优化。这些优化措施能够帮助开发者更好地利用 SQLite 的强大功能,提高应用程序的运行效率和用户体验。

    SQLServer转换SQLite工具(绿色中文版)

    4. 性能优化:为了提高迁移效率,工具可能采用了批处理方式,一次处理大量数据,而不是一条一条操作。 5. 数据一致性:转换工具需确保在迁移前后,数据的一致性和完整性得到保持,避免数据丢失或损坏。 6. 兼容性...

    易语言源码Access转Sqlite.rar

    8. **性能优化**:如果数据量庞大,可能会考虑批量插入,而不是一条一条插入,以提高迁移效率。 9. **测试验证**:迁移完成后,需要对SQLite数据库进行功能测试和性能测试,确保数据的完整性和可用性。 通过这个...

    QT中sqlite多线程操作4个注意问题

    - **性能优化**: 尽量减少线程间的通信,特别是在涉及数据库更新时。大量数据交换可能导致锁竞争,降低性能。考虑使用局部缓存或批量处理数据。 - **设计模式**: 考虑使用数据库连接池(Connection Pool)模式,即...

    免费:Android性能优化视频百度云下载链接.rar

    在Android开发领域,性能优化是提升用户体验和应用质量的关键环节。这个"免费:Android性能优化视频百度云下载链接.rar"的压缩包文件提供了一个学习资源,可能是由一系列视频教程组成,帮助开发者深入理解和掌握...

    SQLITE数据库 UPDATE慢

    9. **硬件优化**:升级硬件,比如使用更快的SSD硬盘,或者增加内存,都能显著提升SQLite的性能。 10. **升级SQLite版本**:持续关注SQLite的新版本,新版本通常包含性能改进和bug修复,可能解决你当前的问题。 综...

    sqlite高性能插入数据

    在处理大数据插入时,优化SQLite的性能对于提升整体应用的效率至关重要。以下是一些关于如何提高SQLite在插入数据时性能的关键知识点: 1. **批量插入**: - 通过一次性提交多条SQL语句,而不是每插入一条就提交一...

Global site tag (gtag.js) - Google Analytics