热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite插入速度的确慢,插入一个记录要100ms左右

SQLite插入速度的确慢,插入一个记录要100ms左右可能有人说要开事务。但事务对于一次性插入很多记录时有效果,但我的应用中需要不定时的插入,每次就一个记录。最多不会超过一分种
SQLite 插入速度的确慢,插入一个记录要 100ms 左右

可能有人说要开事务。

但事务对于一次性插入很多记录时有效果,但我的应用中需要不定时的插入,每次就一个记录。最多不会超过一分种20次。

有什么办法,提高速度?

52 个解决方案

#1


用事务

#2


用事务对插入单条记录,一点速度上的提高都没有

#3


Disable keys when you append data.

#4


我的表都没有外键,

难道主键都不能用?

#5


你是不是插入带有检索的表?
这样在插入过程中会去修改索引。
会耗费一些时间。


如果是普通的表,又只是不定时地插入一条记录。
那就没有办法了!

#6


其它的都排除,你看看你的日记
是不是那里出问题了的!

#7


ding

#8


up

#9


up

#10


每个插入的时候启动事物,速度相当快的。
slqite 不支持事物嵌套,原理是每次执行语句就会产生自动事物

#11


我移植到vxworks上并且测试过, 在单线程的情况下写入速度一秒钟可以达到1000条左右,如果在多线程的情况下,就和你所说的速度差不多了。
硬件平台:PCM9375主板+300M主频CPU
不知道你的测试平台是什么?

#12


不懂,帮顶

#13


up

#14


ding

#15


ding

#16


看是不是有触发器?

#17


各位大侠“使用事务”的建议是正确的

我这几天也在用Sqlite3做一个项目原型,测试插入数据时,发现特别的慢
在Vc下测试插入1000条数据竟然需要1分钟时间,而相同的操作,在Python下只需要0.2秒

看到这个帖子,在VC中使用事务试了一下,速度果然狂快

联想到Python下使用Sqlite3操作完后,必须使用Commit,看来是Python的封装时,强制使用了事务;而在VC下需要手动使用

#18


使用事务批量插入记录肯定是很快的.
现在是如果表中已有大量记录,比如10万条,需每隔一定时间就要插入一条记录,插入速度怎么样?

#19


顶下17楼

#20


开启事物,预编译sql ,bind 字段,插入10万条才两秒左右。

#21


我觉得楼主的问题大家都没有理解。。用事物肯定解决不了问题,因为楼主这个是不定时的插入,不是一次性插入多少条,所以你不可能一直开着事物,不过我觉得楼主你如果既然都是1分钟才插入大约20条,那么你对这个速度就一定很需要提高吗?

#22


频繁的使用事物会锁定数据库吧?

#23


你插入记录的速度很慢,所以每条需要100ms也无所谓呀,反正一分钟也才20条,相对才两秒钟,非要提高速度吗。

#24


楼主用快速接口吧,插入一条记录2ms,我做过测试。

#25


利用事务插入吧效率可以和SQL SERVER 相比

#26


应该要用事务,因为要不然sqlite会每写一条记录直接写一次硬盘,这样当然很慢啦。

#27


我也和楼主碰到了同样的问题,不做批处理,单条记录插入在WINCE下要几百个毫秒。目前还没找到解决方法。

#28


和17楼有同样的感受,用事务提高速度!

#29


多线程的情况下 sqlite 不如berkeley db

#30


和楼主遇到同样的问题。
奇怪的是我同事的机器上(机器和我的配置一样)
不知道是因为sqlite版本的不同还是编译器的不同,
同样是插入一百条数据,我的需要5-6s。他的确只1s左右。

#31


begin;
insert into T_CODE values('AA','01','1');
insert into T_CODE values('AA','02','2');
insert into T_CODE values('AA','03','3'); 
commit;

#32


该回复于2010-04-15 14:04:55被版主删除

#33


该回复于2010-04-16 11:59:23被版主删除

#34


该回复于2010-04-16 15:49:27被版主删除

#35


批处理,只begin一次,只commit一次,速度会很快。不要每次insert都提交

#36


楼上的朋友啊``你们开看清楚行不行啊``一个劲的说事务 事务,

我看打开事务 也无法从根本上解决lz 的问题.

楼主的时间主要消耗 在 打开 原来原来就有大量数据的 数据库文件,和关闭 写入这个文件上面,

都说了是单条的记录了,开事务有毛用 ``差一条记录```

打开事务
插入一条数据
关闭事务

这速度有提升么????
这个和直接插入有什么太大区别么??

事务主要是操作多条记录的时候。。才有速a度提升.事务对于楼主问题``没有根本的解决```

不过确实,lz 你既然一分钟只需要插入那么 几十次,100个ms  应该没太大问题才对。

#37


那么就不要频繁的开启和关闭数据库,采用长链接啊

#38


使用wal模式,这样就不用每次重开一个文件,如果不采用wal,至少也要采用那个不删除事务文件的。

#39


这个问题无法解决,不定期插入单条,而且应该是多线程访问的,因此没办法,不过话说回来这样你也没啥优化的必要

#40


这还真是问题,sqlite内部默认的就是自动提交事务,如果优化也只能手动提交多条事务的方法,或者可以试试把自己提交关闭掉。

#41



db.execDML(L"begin transaction;");//使用事务
//.....执行你的SQL语句
db.execDML(L"commit transaction;");

#42


我也遇到同样的问题,没有解决的方法. 
lz觉得一直开着事务怎么样?
或者定次提交事务.

#43


减少表中索引
估计你那张表除了integer主键以外至少有4个索引吧。或者有非唯一性的索引就更麻烦了。

#44


把数据库连接设计为静态的.

#45


一个6M多的SQL用事务跑了也就几秒钟

#46


有一批智能交通和安防的从业者,并且是有点2的。

#47


挺热闹的,顶一下

#48


引用 24 楼  的回复:
楼主用快速接口吧,插入一条记录2ms,我做过测试。


你说的“快速接口”能否再说明白点?

#49


引用 37 楼  的回复:
那么就不要频繁的开启和关闭数据库,采用长链接啊

请问如何“长链接”?

#50


引用 36 楼  的回复:
楼上的朋友啊``你们开看清楚行不行啊``一个劲的说事务 事务,

我看打开事务 也无法从根本上解决lz 的问题.

楼主的时间主要消耗 在 打开 原来原来就有大量数据的 数据库文件,和关闭 写入这个文件上面,

都说了是单条的记录了,开事务有毛用 ``差一条记录```

打开事务
插入一条数据
关闭事务

这速度有提升么????
这个和直接插入有什么太大区别么??

……

我的数据库里大约3000条记录,每次插入一条记录需要1200+ ms的时间,这是不是跟字段数有关系呀?
我的插入表中有65个字段,汗!

推荐阅读
author-avatar
倩倩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有