关于sqlite3插入数据慢解决
来源:互联网 发布:汉字扫描识别软件 编辑:程序博客网 时间:2024/05/16 14:00
sqlite3插入数据时,插入每条数据大概需要100ms左右(实际情况机器不同可能会不同,本人测试500ms)。如果是批量导入,可以引进事物提高速度。但是如果你的事务是很频繁的插入几条数据,显然100ms是绝对不能容许的。解决办法是,在调用sqlite3_open函数后添加下面一行代码:
sqlite3_exec(db, "PRAGMA synchronous = OFF; ", 0,0,0);(确实快了很多)
上面的解决办法貌似治标不治本,为什么加上上面的代码行,速度会提高那么多?网上解释如下:
磁盘同步
1.如何设置:
PRAGMA synchronous = FULL; (2)
PRAGMA synchronous = NORMAL; (1)
PRAGMA synchronous = OFF; (0)
2.参数含义:
当synchronous设置为FULL (2), SQLite数据库引擎在紧急时刻会暂停以确定数据已经写入磁盘。这使系统崩溃或电源出问题时能确保数据库在重起后不会损坏。FULL synchronous很安全但很慢。
当synchronous设置为NORMAL, SQLite数据库引擎在大部分紧急时刻会暂停,但不像FULL模式下那么频繁。 NORMAL模式下有很小的几率(但不是不存在)发生电源故障导致数据库损坏的情况。但实际上,在这种情况 下很可能你的硬盘已经不能使用,或者发生了其他的不可恢复的硬件错误。
设置为synchronous OFF (0)时,SQLite在传递数据给系统以后直接继续而不暂停。若运行SQLite的应用程序崩溃, 数据不会损伤,但在系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。另一方面,在synchronous OFF时 一些操作可能会快50倍甚至更多。在SQLite 2中,缺省值为NORMAL.而在3中修改为FULL。
3.建议:
如果有定期备份的机制,而且少量数据丢失可接受,用OFF。
注意上面红色加粗的字样。总结:如果你的数据对安全性完整性等要求不是太高,可以采用设置为0的方法,毕竟只是“数据库可能会损坏”,至于损坏几率为多大,笔者也暂不知晓。。。。。。还没遇到过损坏,不知什么时候才会发生。
4,当你设置了PRAGMA synchronous = OFF以后,可以适时的sync()来更新你的数据到硬盘中;
引用:http://www.linuxidc.com/Linux/2012-04/58684.htm
- 关于sqlite3插入数据慢解决
- 解决sqlite3插入数据很慢的问题
- 解决SQLite3插入数据很慢的问题
- 解决sqlite3插入数据很慢的问题,synchronous设置
- 解决sqlite3插入数据很慢的问题,synchronous设置
- 解决sqlite3插入数据很慢的问题
- 解决sqlite3插入数据很慢的问题
- iOS sqlite3插入数据很慢的原因~解决方法
- sqlite3 无法插入数据
- sqlite3插入数据异常
- sqlite3插入记录慢的解决办法
- 关于QTableWidget插入数据库数据很慢的原因
- sqlite3插入数据效率问题
- sqlite3数据插入耗时问题
- python sqlite3 插入数据例程
- python SQLite3 插入数据问题
- Sqlite 插入数据慢解决方法
- Sqlite 插入数据太慢
- springMVC两种方式实现多文件上传及效率比较
- 程序员的核心竞争力是什么?
- 索引(仅供自己日后复习)
- LeetCode—405. Convert a Number to Hexadecimal
- NSOrderedAscending和NSOrderedDescending
- 关于sqlite3插入数据慢解决
- hashmap 转换
- H5前端常见问题
- app更新
- ios在后台 完成一个长期任务
- 低功耗蓝牙开发权威指南第三部分-主机
- 让你用 Chrome 上网快到想哭:Vimium
- Appium for win7 环境搭建
- Redux 介绍指南