热门标签 | 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的应用场景。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了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。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
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社区 版权所有