解决sqlite3插入数据很慢的问题

转载 2016年08月31日 16:44:56

 初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然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的方法,毕竟只是“数据库可能会损坏”,至于损坏几率为多大,笔者也暂不知晓。。。。。。还没遇到过损坏,不知什么时候才会发生。

解决SQLite3插入数据很慢的问题

初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然100ms是不能容许的。解决办法是,在调用sqli...
  • xingliyuan22
  • xingliyuan22
  • 2013年06月06日 17:04
  • 497

解决sqlite3插入数据很慢的问题

初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然100ms是不能容许的。解决办法是,在调用sqli...
  • majiakun1
  • majiakun1
  • 2015年06月23日 16:29
  • 6211

解决sqlite3插入数据很慢的问题,synchronous设置

初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然100ms是不能容许的。 解决办法是,在调用...
  • AAA123524457
  • AAA123524457
  • 2015年05月05日 14:48
  • 1221

解决sqlite3插入数据很慢的问题,synchronous设置

初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然100ms是不能容许的。 解决办法是,在调用...
  • maweiqi
  • maweiqi
  • 2013年12月07日 21:35
  • 4911

iOS sqlite3插入数据很慢的原因~解决方法

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假...
  • shihuboke
  • shihuboke
  • 2017年07月08日 17:29
  • 307

关于sqlite3插入数据慢解决

sqlite3插入数据时,插入每条数据大概需要100ms左右(实际情况机器不同可能会不同,本人测试500ms)。如果是批量导入,可以引进事物提高速度。但是如果你的事务是很频繁的插入几条数据,显然100...
  • wutu_csdn_blog
  • wutu_csdn_blog
  • 2016年09月27日 11:31
  • 98

sqlite避免重复插入数据

用insert语句插入数据,为避免重复插入又不打断数据处理。 首先要避免重复插入,就必须在插入时引发冲突。在表中设置了id字段,该字段为UNIQUE属性,当插入的id已存在时引发冲突。 引发冲突后...
  • shangxinlei88
  • shangxinlei88
  • 2014年12月22日 12:00
  • 1572

VC操作sqlite3数据库插入blob字段(记录)

int CVCFaceCaptureClientDlg::writeFile(SnapInfo & structSnap, char * szImagePath, int bufLen, in...
  • lx624909677
  • lx624909677
  • 2014年09月10日 10:32
  • 1019

提升SQLite数据插入效率低、速度慢的方法

前言 SQLite数据库由于其简单、灵活、轻量、开源,已经被越来越多的被应用到中小型应用中。甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作。因此我最近编写有关遥感数据处理的程序的...
  • majiakun1
  • majiakun1
  • 2015年06月23日 16:29
  • 30248

python3-操作SQLite、创建表、添加数据、查询数据

SQLlte数据类型创建数据库,创建表如果要使用SQL必须要导入sqlite3库。 import sqlite3# '''创建一个数据库,文件名''' conn = sqlite3.connect(...
  • qq_36482772
  • qq_36482772
  • 2016年12月05日 05:10
  • 4378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决sqlite3插入数据很慢的问题
举报原因:
原因补充:

(最多只允许输入30个字)