作者:倩倩 | 来源:互联网 | 2023-09-04 11:38
SQLite插入速度的确慢,插入一个记录要100ms左右可能有人说要开事务。但事务对于一次性插入很多记录时有效果,但我的应用中需要不定时的插入,每次就一个记录。最多不会超过一分种
SQLite 插入速度的确慢,插入一个记录要 100ms 左右
可能有人说要开事务。
但事务对于一次性插入很多记录时有效果,但我的应用中需要不定时的插入,每次就一个记录。最多不会超过一分种20次。
有什么办法,提高速度?
52 个解决方案
Disable keys when you append data.
你是不是插入带有检索的表?
这样在插入过程中会去修改索引。
会耗费一些时间。
如果是普通的表,又只是不定时地插入一条记录。
那就没有办法了!
其它的都排除,你看看你的日记
是不是那里出问题了的!
每个插入的时候启动事物,速度相当快的。
slqite 不支持事物嵌套,原理是每次执行语句就会产生自动事物
我移植到vxworks上并且测试过, 在单线程的情况下写入速度一秒钟可以达到1000条左右,如果在多线程的情况下,就和你所说的速度差不多了。
硬件平台:PCM9375主板+300M主频CPU
不知道你的测试平台是什么?
各位大侠“使用事务”的建议是正确的
我这几天也在用Sqlite3做一个项目原型,测试插入数据时,发现特别的慢
在Vc下测试插入1000条数据竟然需要1分钟时间,而相同的操作,在Python下只需要0.2秒
看到这个帖子,在VC中使用事务试了一下,速度果然狂快
联想到Python下使用Sqlite3操作完后,必须使用Commit,看来是Python的封装时,强制使用了事务;而在VC下需要手动使用
使用事务批量插入记录肯定是很快的.
现在是如果表中已有大量记录,比如10万条,需每隔一定时间就要插入一条记录,插入速度怎么样?
开启事物,预编译sql ,bind 字段,插入10万条才两秒左右。
我觉得楼主的问题大家都没有理解。。用事物肯定解决不了问题,因为楼主这个是不定时的插入,不是一次性插入多少条,所以你不可能一直开着事物,不过我觉得楼主你如果既然都是1分钟才插入大约20条,那么你对这个速度就一定很需要提高吗?
你插入记录的速度很慢,所以每条需要100ms也无所谓呀,反正一分钟也才20条,相对才两秒钟,非要提高速度吗。
楼主用快速接口吧,插入一条记录2ms,我做过测试。
利用事务插入吧效率可以和SQL SERVER 相比
应该要用事务,因为要不然sqlite会每写一条记录直接写一次硬盘,这样当然很慢啦。
我也和楼主碰到了同样的问题,不做批处理,单条记录插入在WINCE下要几百个毫秒。目前还没找到解决方法。
多线程的情况下 sqlite 不如berkeley db
和楼主遇到同样的问题。
奇怪的是我同事的机器上(机器和我的配置一样)
不知道是因为sqlite版本的不同还是编译器的不同,
同样是插入一百条数据,我的需要5-6s。他的确只1s左右。
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;
批处理,只begin一次,只commit一次,速度会很快。不要每次insert都提交
楼上的朋友啊``你们开看清楚行不行啊``一个劲的说事务 事务,
我看打开事务 也无法从根本上解决lz 的问题.
楼主的时间主要消耗 在 打开 原来原来就有大量数据的 数据库文件,和关闭 写入这个文件上面,
都说了是单条的记录了,开事务有毛用 ``差一条记录```
打开事务
插入一条数据
关闭事务
这速度有提升么????
这个和直接插入有什么太大区别么??
事务主要是操作多条记录的时候。。才有速a度提升.事务对于楼主问题``没有根本的解决```
不过确实,lz 你既然一分钟只需要插入那么 几十次,100个ms 应该没太大问题才对。
使用wal模式,这样就不用每次重开一个文件,如果不采用wal,至少也要采用那个不删除事务文件的。
这个问题无法解决,不定期插入单条,而且应该是多线程访问的,因此没办法,不过话说回来这样你也没啥优化的必要
这还真是问题,sqlite内部默认的就是自动提交事务,如果优化也只能手动提交多条事务的方法,或者可以试试把自己提交关闭掉。
我也遇到同样的问题,没有解决的方法.
lz觉得一直开着事务怎么样?
或者定次提交事务.
减少表中索引
估计你那张表除了integer主键以外至少有4个索引吧。或者有非唯一性的索引就更麻烦了。