SQLite优化方法


例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行

sqlite3_exec(db, “insert into name values ‘lxkxf', ‘24'; ”, 0, 0, &zErrMsg);

将会重复的打开关闭数据库文件100万次,所以速度当然会很慢。因此对于这种情况我们应该使用“事务”。

具体方法如下:在执行SQL语句之前和SQL语句执行完毕之后加上

rc = sqlite3_exec(db, "BEGIN;", 0, 0, &zErrMsg);

//执行SQL语句

rc = sqlite3_exec(db, "COMMIT;", 0, 0, &zErrMsg);



这样SQLite将把全部要执行的SQL语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据库,这样数据库文件只被打开关闭了一次,效率自然大大的提高。有一组数据对比:



测试1: 1000 INSERTs

CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');
... 995 lines omitted
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');

SQLite 2.7.6:
13.061

SQLite 2.7.6 (nosync):
0.223




测试2: 使用事务 25000 INSERTs

BEGIN;
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t2 VALUES(1,59672,'fifty nine thousand six hundred seventy two');
... 24997 lines omitted
INSERT INTO t2 VALUES(24999,89569,'eighty nine thousand five hundred sixty nine');
INSERT INTO t2 VALUES(25000,94666,'ninety four thousand six hundred sixty six');
COMMIT;

SQLite 2.7.6:
0.914

SQLite 2.7.6 (nosync):
0.757




可见使用了事务之后却是极大的提高了数据库的效率。但是我们也要注意,使用事务也是有一定的开销的,所以对于数据量很小的操作可以不必使用,以免造成而外的消耗。



相关阅读:
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
js实现点击复制当前文本到剪贴板功能(兼容所有浏览器)
Java Web开发入门书籍实例解析(总结一)
Win7打印机发送打印命令后不打印自动消失的解决办法
DIV+CSS垂直居中一个浮动元素
超实用的javascript时间处理总结
C#使用SendMessage实现进程间通信的方法
iOS多线程介绍
在win7系统下如何更改窗口边框以及任务栏颜色?
android 加载本地联系人实现方法
用PHP生成excel文件到指定目录
Win10组策略编辑器总是弹出"命名空间"的对话框该怎么办?
javascript省市级联功能实现方法实例详解
win10上手怎么样?win10快速上手只需三分钟
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 杨陵-郴州 普雄-弯坵 阜阳-邳州 宣化-怀柔北 偃师-公主岭 信阳-张家口南 贵阳-宜昌东 资溪-景德镇 衡阳-滕州 哈尔滨西-阜阳 洮南-绥德 麻城-秦皇岛 库尔勒-武山 凯里南-南昌西 民权-商丘南 鹰潭北-德安 南京南-武夷山北 铁岭-佳木斯 清原-荒沟西 铜仁南-瓦屋山 北台子-黄家店 广水-兴城 漯河-驻马店 菏泽-聊城 奇峰塔-白涧 南木-扎赉诺尔西 长春-梅河口 保康-锦州 阿木尔-青水山 彰武-鄯善 到保-大石桥 绍兴-酉阳 三门峡-安阳 草海-子长 梨树镇-阿城 大口钦-五常 介休-西安南 武威-宣城 诸暨-上海南 义乌-关岭 海城-三门峡西 福州-惠州南 广州南-南宁西 吉安-安庆西 东通化-老岭 长沙-北流 伊拉哈-富裕 尚志-杭州 红花沟-五十家子 大杨树-呼兰 青铜峡-沈阳北 岳阳东-华山北 永康-沧州 湛江-息烽 郑州东-缙云西 萧县北-铜陵北 庙庄-宝鸡 涟源-宜宾 双城堡-公主岭 商南-武穴 枣阳-饶阳 吐鲁番北-小河镇 莲东-捏掌 武义-唐山 开封-海城 土贵乌拉-确山 南宁-金华 陇西-莆田 沈阳北-中和 新余北-嘉善南 青铜峡-开封 蔡家坡-淮滨 缙云-巴东 麻阳-融安 新乡-大石桥 内乡-横峰 曹县-锦州南 蔡家坡-宝鸡 滁州北-青龙山 枣庄西-双峰北 肇庆列车站到肇庆学院
考取青岛市出租车服务资格证外地人需要哪些条件麻烦明白人给
金州列车火车站到大连市甘井子区北海工业区国立街286号的路怎么走
苏州太仓赤脚森林公园在哪?
脑溢血患者是否能坐20小时的长途火车列车
我是重庆的,到那学养殖黄鳝技术
我有一点东西需要从义乌运到漯河 什么样的运送方式最好
如何坐车去闽侯旗山 那里离旗山森林公园近吗 有旅行团去那
从北京丽泽长途汽车站到山东滕州汽车站的班车
从东莞凤岗镇到清远市走高速公路二类车要多少钱
从青岛求实职业技术学院到青岛五十三中怎么走
西安三府湾客运站到山西河津的车一天有几班什么时候发车
衡阳南华大学的邮编是多少?
七月底从昆明到长沙的火车列车票好买吗能买到硬卧票吗
我在上海买的列车票在太仓可以退吗?
坐火车列车从肇庆到常州,最佳路线应该怎样走?
深圳去贵州如何坐列车因为列车票非常紧张,所以不可能去广
沧州到涿州的长途汽车除了早上七点半的还有几点的
运城到信阳火车列车票价多少几小时到
樟木头到柳州的客车汽车车票是多少
我发的中通快递是30号发往盐城阜宁的,1号到的无锡中转站,2
广州到厦门坐客车到哪个车站
安庆到承德的列车火车票
从山东枣庄的台儿庄到泰山怎么走
从石家庄到成都上学,录取通知说坐飞机是五折吗如果不是,
西安到张家界自驾游线路
悬崖勒什么 十二生肖成语 急!!!!!!!!!!!
从吉首到福州或者厦门最新的火车列车时刻表 及价格 如果没有直达
K905列车28号几点开始售票啊? 请朋友帮帮忙!
从漕宝路莲花路坐哪个公交车到上海火车列车站

Copyright © 2016 phpStudy |