SQLite 插入大量数据慢的解决方法
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 插入大量数据慢的解决方法相关推荐
- php 插入 mysql_php插入mysql数据返回id的方法
如下所示: $dbh = mysql_connect('localhost','root','root'); mysql_select_db('pkbk'); $query = "inser ...
- Android - 已安装了存在签名冲突的同名数据包,解决方法!
错误提示:已安装了存在签名冲突的同名数据包. 解决方法:打开Android Studio,打开logcat,用usb线连接你出错的手机,识别出手机之后,在你的项目后面,点击"run" ...
- 1.EXTJS Row Editor Grid 点取消时插入的新行 的解决方法
1.EXTJS Row Editor Grid 点取消时插入的新行 的解决方法 <?xml:namespace prefix = o ns = "urn:schemas-micro ...
- 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法
机器学习数据倾斜的解决方法 总览 (Overview) I was given a large dataset of files, what some would like to call big d ...
- mybatis中resultType取出数据顺序不一致解决方法
原来我的查询返回resultType = "map" , 也就是这个map,打乱了顺序.因为map并不能保证存入取出数据一致. 解决方法:resultType = "ma ...
- RAC环境创建本地数据文件的解决方法
RAC环境创建本地数据文件的解决方法: 思路如下: 1.数据文件 offline 2.通过RMAN 将数据文件拷贝到存储 3.alter database rename file 将本地文件路径修 ...
- Android ViewPager 重复数据问题的解决方法
Android ViewPager 重复数据问题的解决方法 参考文章: (1)Android ViewPager 重复数据问题的解决方法 (2)https://www.cnblogs.com/Linc ...
- ORA-01157 无法标识锁定数据文件的解决方法
ORA-01157 无法标识锁定数据文件的解决方法 参考文章: (1)ORA-01157 无法标识锁定数据文件的解决方法 (2)https://www.cnblogs.com/huangbiquan/ ...
- 插入U盘无反应解决方法
适应情况:插入本机u盘无反应,插入其他u盘有反应,u盘插入其他电脑有反应 解决方法:设备管理器-->其他设备-->删除原先的u盘驱动程序
- oracle导入表无反应,EZDML无法导入oracle数据表的解决方法
EZDML无法导入oracle数据表的解决方法 EZDML无法导入oracle数据表的解决方法 1.配置好oracle连接,进行导入数据表时报错:sql*net not properly instal ...
最新文章
- 《Nature》:衰老后的核糖体发生了哪些致病变化
- eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包
- 单链表排序(冒泡排序)(C语言)
- (50)FPGA面试题消除一个glitch实现
- c语言随机抽取小程序_c++ c语言编写抽学号小程序
- 关于小波分解的滤波器理解
- 重定向后路径上自动添加jsessionid=
- dx11 Shaders for maya
- win7局域网共享文件夹
- 编程需要知道多少数学知识?
- vbScript实现开机后的开心网自动登陆
- 申请免费SSL证书教程之华为云20张免费证书
- excel的简单操作
- 安全网关设备有哪些 安全网关产品介绍
- 06	甲流疫情死亡率
- ELK系列(四)、Logstash读取nginx日志写入ES中
- 在官方网站获得JMeter工具的步骤
- 苹果cms模板_为什么选择苹果CMS?
- 数据分析笔记--matplotlib(五)绘制条形图
- 终极肖像美容润饰PS动作