热门标签 | 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个字段,汗!

推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Python使用SQLite1.sqlite3的安装python2.5.x以上版本默认自带sqlite3模块。2.链接sqlite3数据库```#导入sqlite3模块import ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • SQLite–CONSTRAINTS(约束)约束是数据列在表上执行的规则。这些是用来限制的数据类型可以进入一个表。这样可以确保数据的准确性和可靠性在数据库中。    级或表级约束可 ... [详细]
  • SQLite3是一个广泛使用的数据库,从linux,windows到安卓都有SQLite的应用。本文介绍SQLite3在windows上的编译。SQLite3提供了多种源代码的下载 ... [详细]
  • 背景使用sqlite3的命令实现数据去重,与无效数据删除等操作。所有操作均封装在shellscript中。创建数据库邮件数据库:UserEmail.dbEmail表:TABLE_EM ... [详细]
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社区 版权所有