sqlite 插入数据很慢的原因:sqlite在没有显式使用事务的时候会为每条insert都使用事务操作,而sqlite数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进行大量的操作,时间都耗费在I/O操作上,所以很慢。
解决方法是显式使用事务的形式提交:因为我们开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打开一次。
我在没有显式使用事务形式插入100条数据时用了12.226s;用显式事务形式,插入100条只用了0.172s,插入1000000条也才34.891s,相关很大吧。
显式使用事务的例子:

#include <iostream>
#include <windows.h>
using namespace std;
#include "sqlite/sqlite3.h"
int main()
{sqlite3* db;int nResult = sqlite3_open("test.db",&db);if (nResult != SQLITE_OK){cout<<"打开数据库失败:"<<sqlite3_errmsg(db)<<endl;return 0;}else{cout<<"数据库打开成功"<<endl;}char* errmsg;nResult = sqlite3_exec(db,"create table fuck(id integer primary key autoincrement,name varchar(100))",NULL,NULL,&errmsg);if (nResult != SQLITE_OK){sqlite3_close(db);cout<<errmsg;sqlite3_free(errmsg);return 0;}string strSql;strSql+="begin;\n";for (int i=0;i<100;i++){strSql+="insert into fuck values(null,'heh');\n";}strSql+="commit;";//cout<<strSql<<endl;
SYSTEMTIME tm_s;GetLocalTime(&tm_s);nResult = sqlite3_exec(db,strSql.c_str(),NULL,NULL,&errmsg);SYSTEMTIME tm_e;GetLocalTime(&tm_e);if (nResult != SQLITE_OK){sqlite3_close(db);cout<<errmsg<<endl;sqlite3_free(errmsg);return 0;}cout<<"start:"<<tm_s.wMinute<<":"<<tm_s.wSecond<<":"<<tm_s.wMilliseconds<<endl;cout<<"end  :"<<tm_e.wMinute<<":"<<tm_e.wSecond<<":"<<tm_e.wMilliseconds<<endl;return 0;
} 

SQLite 插入大量数据慢的解决方法相关推荐

  1. php 插入 mysql_php插入mysql数据返回id的方法

    如下所示: $dbh = mysql_connect('localhost','root','root'); mysql_select_db('pkbk'); $query = "inser ...

  2. Android - 已安装了存在签名冲突的同名数据包,解决方法!

    错误提示:已安装了存在签名冲突的同名数据包. 解决方法:打开Android Studio,打开logcat,用usb线连接你出错的手机,识别出手机之后,在你的项目后面,点击"run" ...

  3. 1.EXTJS Row Editor Grid 点取消时插入的新行 的解决方法

    1.EXTJS  Row Editor Grid  点取消时插入的新行 的解决方法 <?xml:namespace prefix = o ns = "urn:schemas-micro ...

  4. 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法

    机器学习数据倾斜的解决方法 总览 (Overview) I was given a large dataset of files, what some would like to call big d ...

  5. mybatis中resultType取出数据顺序不一致解决方法

    原来我的查询返回resultType = "map" , 也就是这个map,打乱了顺序.因为map并不能保证存入取出数据一致. 解决方法:resultType = "ma ...

  6. RAC环境创建本地数据文件的解决方法

    RAC环境创建本地数据文件的解决方法: 思路如下: 1.数据文件 offline 2.通过RMAN 将数据文件拷贝到存储 3.alter database  rename  file 将本地文件路径修 ...

  7. Android ViewPager 重复数据问题的解决方法

    Android ViewPager 重复数据问题的解决方法 参考文章: (1)Android ViewPager 重复数据问题的解决方法 (2)https://www.cnblogs.com/Linc ...

  8. ORA-01157 无法标识锁定数据文件的解决方法

    ORA-01157 无法标识锁定数据文件的解决方法 参考文章: (1)ORA-01157 无法标识锁定数据文件的解决方法 (2)https://www.cnblogs.com/huangbiquan/ ...

  9. 插入U盘无反应解决方法

    适应情况:插入本机u盘无反应,插入其他u盘有反应,u盘插入其他电脑有反应 解决方法:设备管理器-->其他设备-->删除原先的u盘驱动程序

  10. oracle导入表无反应,EZDML无法导入oracle数据表的解决方法

    EZDML无法导入oracle数据表的解决方法 EZDML无法导入oracle数据表的解决方法 1.配置好oracle连接,进行导入数据表时报错:sql*net not properly instal ...

最新文章

  1. 《Nature》:衰老后的核糖体发生了哪些致病变化
  2. eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包
  3. 单链表排序(冒泡排序)(C语言)
  4. (50)FPGA面试题消除一个glitch实现
  5. c语言随机抽取小程序_c++ c语言编写抽学号小程序
  6. 关于小波分解的滤波器理解
  7. 重定向后路径上自动添加jsessionid=
  8. dx11 Shaders for maya
  9. win7局域网共享文件夹
  10. 编程需要知道多少数学知识?
  11. vbScript实现开机后的开心网自动登陆
  12. 申请免费SSL证书教程之华为云20张免费证书
  13. excel的简单操作
  14. 安全网关设备有哪些 安全网关产品介绍
  15. 06 甲流疫情死亡率
  16. ELK系列(四)、Logstash读取nginx日志写入ES中
  17. 在官方网站获得JMeter工具的步骤
  18. 苹果cms模板_为什么选择苹果CMS?
  19. 数据分析笔记--matplotlib(五)绘制条形图
  20. 终极肖像美容润饰PS动作

热门文章

  1. [No0000174]Spring常用注解(收藏大全)
  2. Android Studio 快速实现上传项目到Github(详细步骤)
  3. scala基础-04
  4. jmeter-01 JMeter HTTP测试的各元件功能演示示例
  5. getNextElement( )函数——获取下一个特定的元素节点
  6. Tomcat开发技术之与HTTP服务器的集成
  7. SPFA和FLOYD算法如何打印路径
  8. C#处理控制台关闭事件
  9. 两个文本框异动任何一个能即时更新计算结果
  10. position之属性