sqlite3到底能支持多大的数据量? [问题点数:100分,结帖人hai_cheng001]

一键查看最优答案

确认一键查看最优答案?
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
Bbs1
本版专家分:0
版主
结帖率 50%
Bbs11
本版专家分:239799
版主
Blank
红花 2008年8月 其他数据库开发大版内专家分月排行榜第一
2008年7月 其他数据库开发大版内专家分月排行榜第一
2007年7月 其他数据库开发大版内专家分月排行榜第一
2007年6月 其他数据库开发大版内专家分月排行榜第一
2006年12月 其他数据库开发大版内专家分月排行榜第一
2006年11月 其他数据库开发大版内专家分月排行榜第一
2006年9月 其他数据库开发大版内专家分月排行榜第一
2006年5月 其他数据库开发大版内专家分月排行榜第一
2005年12月 其他数据库开发大版内专家分月排行榜第一
Blank
黄花 2015年6月 其他数据库开发大版内专家分月排行榜第二
2015年5月 其他数据库开发大版内专家分月排行榜第二
2013年6月 其他数据库开发大版内专家分月排行榜第二
2013年3月 其他数据库开发大版内专家分月排行榜第二
2012年12月 其他数据库开发大版内专家分月排行榜第二
2012年10月 其他数据库开发大版内专家分月排行榜第二
2012年9月 其他数据库开发大版内专家分月排行榜第二
2012年7月 其他数据库开发大版内专家分月排行榜第二
2012年6月 其他数据库开发大版内专家分月排行榜第二
2011年11月 其他数据库开发大版内专家分月排行榜第二
2011年10月 其他数据库开发大版内专家分月排行榜第二
2011年9月 其他数据库开发大版内专家分月排行榜第二
2011年6月 其他数据库开发大版内专家分月排行榜第二
2011年5月 其他数据库开发大版内专家分月排行榜第二
2011年4月 其他数据库开发大版内专家分月排行榜第二
2011年3月 其他数据库开发大版内专家分月排行榜第二
2011年2月 其他数据库开发大版内专家分月排行榜第二
2010年12月 其他数据库开发大版内专家分月排行榜第二
2010年11月 其他数据库开发大版内专家分月排行榜第二
2010年9月 其他数据库开发大版内专家分月排行榜第二
2010年7月 其他数据库开发大版内专家分月排行榜第二
2010年4月 其他数据库开发大版内专家分月排行榜第二
2010年3月 其他数据库开发大版内专家分月排行榜第二
2010年1月 其他数据库开发大版内专家分月排行榜第二
2009年12月 其他数据库开发大版内专家分月排行榜第二
2008年6月 其他数据库开发大版内专家分月排行榜第二
2008年5月 其他数据库开发大版内专家分月排行榜第二
2008年4月 其他数据库开发大版内专家分月排行榜第二
2007年5月 其他数据库开发大版内专家分月排行榜第二
2007年1月 其他数据库开发大版内专家分月排行榜第二
2006年10月 其他数据库开发大版内专家分月排行榜第二
2006年8月 其他数据库开发大版内专家分月排行榜第二
2006年6月 其他数据库开发大版内专家分月排行榜第二
2006年4月 其他数据库开发大版内专家分月排行榜第二
2005年9月 其他数据库开发大版内专家分月排行榜第二
Blank
蓝花 2013年12月 其他数据库开发大版内专家分月排行榜第三
2013年5月 其他数据库开发大版内专家分月排行榜第三
2013年4月 其他数据库开发大版内专家分月排行榜第三
2013年2月 其他数据库开发大版内专家分月排行榜第三
2013年1月 其他数据库开发大版内专家分月排行榜第三
2012年5月 其他数据库开发大版内专家分月排行榜第三
2012年4月 其他数据库开发大版内专家分月排行榜第三
2012年3月 其他数据库开发大版内专家分月排行榜第三
2012年2月 其他数据库开发大版内专家分月排行榜第三
2011年8月 其他数据库开发大版内专家分月排行榜第三
2011年7月 其他数据库开发大版内专家分月排行榜第三
2010年10月 其他数据库开发大版内专家分月排行榜第三
2010年5月 其他数据库开发大版内专家分月排行榜第三
2010年2月 其他数据库开发大版内专家分月排行榜第三
2009年11月 其他数据库开发大版内专家分月排行榜第三
2009年10月 其他数据库开发大版内专家分月排行榜第三
2009年5月 其他数据库开发大版内专家分月排行榜第三
2009年4月 其他数据库开发大版内专家分月排行榜第三
2008年12月 其他数据库开发大版内专家分月排行榜第三
2008年11月 其他数据库开发大版内专家分月排行榜第三
2008年10月 其他数据库开发大版内专家分月排行榜第三
2008年9月 其他数据库开发大版内专家分月排行榜第三
2007年9月 其他数据库开发大版内专家分月排行榜第三
2007年8月 其他数据库开发大版内专家分月排行榜第三
2007年4月 其他数据库开发大版内专家分月排行榜第三
2007年3月 其他数据库开发大版内专家分月排行榜第三
2007年2月 其他数据库开发大版内专家分月排行榜第三
2006年7月 其他数据库开发大版内专家分月排行榜第三
2006年2月 其他数据库开发大版内专家分月排行榜第三
2006年1月 其他数据库开发大版内专家分月排行榜第三
2005年11月 其他数据库开发大版内专家分月排行榜第三
2005年10月 其他数据库开发大版内专家分月排行榜第三
Bbs1
本版专家分:0
版主
Bbs11
本版专家分:239799
版主
Blank
红花 2008年8月 其他数据库开发大版内专家分月排行榜第一
2008年7月 其他数据库开发大版内专家分月排行榜第一
2007年7月 其他数据库开发大版内专家分月排行榜第一
2007年6月 其他数据库开发大版内专家分月排行榜第一
2006年12月 其他数据库开发大版内专家分月排行榜第一
2006年11月 其他数据库开发大版内专家分月排行榜第一
2006年9月 其他数据库开发大版内专家分月排行榜第一
2006年5月 其他数据库开发大版内专家分月排行榜第一
2005年12月 其他数据库开发大版内专家分月排行榜第一
Blank
黄花 2015年6月 其他数据库开发大版内专家分月排行榜第二
2015年5月 其他数据库开发大版内专家分月排行榜第二
2013年6月 其他数据库开发大版内专家分月排行榜第二
2013年3月 其他数据库开发大版内专家分月排行榜第二
2012年12月 其他数据库开发大版内专家分月排行榜第二
2012年10月 其他数据库开发大版内专家分月排行榜第二
2012年9月 其他数据库开发大版内专家分月排行榜第二
2012年7月 其他数据库开发大版内专家分月排行榜第二
2012年6月 其他数据库开发大版内专家分月排行榜第二
2011年11月 其他数据库开发大版内专家分月排行榜第二
2011年10月 其他数据库开发大版内专家分月排行榜第二
2011年9月 其他数据库开发大版内专家分月排行榜第二
2011年6月 其他数据库开发大版内专家分月排行榜第二
2011年5月 其他数据库开发大版内专家分月排行榜第二
2011年4月 其他数据库开发大版内专家分月排行榜第二
2011年3月 其他数据库开发大版内专家分月排行榜第二
2011年2月 其他数据库开发大版内专家分月排行榜第二
2010年12月 其他数据库开发大版内专家分月排行榜第二
2010年11月 其他数据库开发大版内专家分月排行榜第二
2010年9月 其他数据库开发大版内专家分月排行榜第二
2010年7月 其他数据库开发大版内专家分月排行榜第二
2010年4月 其他数据库开发大版内专家分月排行榜第二
2010年3月 其他数据库开发大版内专家分月排行榜第二
2010年1月 其他数据库开发大版内专家分月排行榜第二
2009年12月 其他数据库开发大版内专家分月排行榜第二
2008年6月 其他数据库开发大版内专家分月排行榜第二
2008年5月 其他数据库开发大版内专家分月排行榜第二
2008年4月 其他数据库开发大版内专家分月排行榜第二
2007年5月 其他数据库开发大版内专家分月排行榜第二
2007年1月 其他数据库开发大版内专家分月排行榜第二
2006年10月 其他数据库开发大版内专家分月排行榜第二
2006年8月 其他数据库开发大版内专家分月排行榜第二
2006年6月 其他数据库开发大版内专家分月排行榜第二
2006年4月 其他数据库开发大版内专家分月排行榜第二
2005年9月 其他数据库开发大版内专家分月排行榜第二
Blank
蓝花 2013年12月 其他数据库开发大版内专家分月排行榜第三
2013年5月 其他数据库开发大版内专家分月排行榜第三
2013年4月 其他数据库开发大版内专家分月排行榜第三
2013年2月 其他数据库开发大版内专家分月排行榜第三
2013年1月 其他数据库开发大版内专家分月排行榜第三
2012年5月 其他数据库开发大版内专家分月排行榜第三
2012年4月 其他数据库开发大版内专家分月排行榜第三
2012年3月 其他数据库开发大版内专家分月排行榜第三
2012年2月 其他数据库开发大版内专家分月排行榜第三
2011年8月 其他数据库开发大版内专家分月排行榜第三
2011年7月 其他数据库开发大版内专家分月排行榜第三
2010年10月 其他数据库开发大版内专家分月排行榜第三
2010年5月 其他数据库开发大版内专家分月排行榜第三
2010年2月 其他数据库开发大版内专家分月排行榜第三
2009年11月 其他数据库开发大版内专家分月排行榜第三
2009年10月 其他数据库开发大版内专家分月排行榜第三
2009年5月 其他数据库开发大版内专家分月排行榜第三
2009年4月 其他数据库开发大版内专家分月排行榜第三
2008年12月 其他数据库开发大版内专家分月排行榜第三
2008年11月 其他数据库开发大版内专家分月排行榜第三
2008年10月 其他数据库开发大版内专家分月排行榜第三
2008年9月 其他数据库开发大版内专家分月排行榜第三
2007年9月 其他数据库开发大版内专家分月排行榜第三
2007年8月 其他数据库开发大版内专家分月排行榜第三
2007年4月 其他数据库开发大版内专家分月排行榜第三
2007年3月 其他数据库开发大版内专家分月排行榜第三
2007年2月 其他数据库开发大版内专家分月排行榜第三
2006年7月 其他数据库开发大版内专家分月排行榜第三
2006年2月 其他数据库开发大版内专家分月排行榜第三
2006年1月 其他数据库开发大版内专家分月排行榜第三
2005年11月 其他数据库开发大版内专家分月排行榜第三
2005年10月 其他数据库开发大版内专家分月排行榜第三
Bbs9
本版专家分:53578
版主
Blank
红花 2012年11月 其他数据库开发大版内专家分月排行榜第一
Blank
黄花 2010年6月 其他数据库开发大版内专家分月排行榜第二
2010年6月 Oracle大版内专家分月排行榜第二
2010年5月 其他数据库开发大版内专家分月排行榜第二
Blank
蓝花 2011年1月 其他数据库开发大版内专家分月排行榜第三
2010年12月 其他数据库开发大版内专家分月排行榜第三
Bbs12
本版专家分:471951
版主
Blank
名人 2012年 荣获名人称号
Blank
榜眼 2010年 总版技术专家分年内排行榜第二
Blank
探花 2009年 总版技术专家分年内排行榜第三
Blank
进士 2013年 总版技术专家分年内排行榜第十
2011年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:0
版主
Bbs12
本版专家分:471951
版主
Blank
名人 2012年 荣获名人称号
Blank
榜眼 2010年 总版技术专家分年内排行榜第二
Blank
探花 2009年 总版技术专家分年内排行榜第三
Blank
进士 2013年 总版技术专家分年内排行榜第十
2011年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:0
版主
Bbs12
本版专家分:471951
版主
Blank
名人 2012年 荣获名人称号
Blank
榜眼 2010年 总版技术专家分年内排行榜第二
Blank
探花 2009年 总版技术专家分年内排行榜第三
Blank
进士 2013年 总版技术专家分年内排行榜第十
2011年 总版技术专家分年内排行榜第七
Bbs1
本版专家分:10
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Sqlite (二)性能测试
WAL是SQLite<em>3</em>.7.0版本引入的一个重大改进。SQLite官网宣称在很多使用场景下,WAL模型的性能都要好于默认的DELETE模式。下面将针对几个主要场景对WAL性能做测试,测试的硬件与xxx保持一致。 纯写场景 1) 测试说明 测试简单更新事务在WAL模式下与DELETE日志模式性能对比,测试语句形如:update user set c1=c1+1 where id=...
如何获取查询数据库表中记录条数
想用 SELECT COUNT(*) FROM table去获取表中记录总数目,SQL语句我会写但是 不知道如何使用去拿到值 例如:<em>sqlite</em><em>3</em>_get_table(m_pDB, "SELECT *
Sqlite3相关的数据库的大小限制
数据库的大小,这里需要注意的是数据库是由于Sqlite<em>3</em>的大小分为数据库文件本身的大小和数据库表的大小 1.通过PRAGMA编译指令可以获取和指定数据库相关的大小 上一篇转载的文章中,已经有相关的编译指令介绍了,和大小限制相关的指令有: PRAGMA max_page_count    获取的是数据库文件的最大页面数量,一般为1G个页面,可调整赋值 PRAGMA  page_count  
关于sqlite一个数据库创建多张表的问题 求大神指教!
我是新手 最近自己尝试做个小程序。关于一个数据库建多张表 小弟查阅一下,也不能得到解决,求高手指教下。 public void onCreate(SQLiteDatabase db) { String sqlCalendar = "CREATE TABLE IF NOT EXISTS calendar(pid integer primary key autoincrement," + "moon varchar(4)," + "day varchar(4)," + "year varchar(4)," + "hints varchar(8)," + "sort varchar(4)," + "tag text," + "memorialDay varchar(4))"; db.execSQL(sqlCalendar); String sqlSpend = "CREATE TABLE IF NOT EXISTS spend(spendid integer primary key autoincrement," + "moon varchar(4)," + "day varchar(4)," + "year varchar(4)," + "spendsort varchar(8)," + "spend varchar(4))"; db.execSQL(sqlSpend); } public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS calendar"); db.execSQL("DROP TABLE IF EXISTS spend"); onCreate(db); } 以上是帮助类的代码部分,服务部分的代码 public boolean insert(ScheduleDateTag sdt) { boolean flag = false; ContentValues values = new ContentValues(); values.put("moon", sdt.getMoon()); values.put("day", sdt.getDay()); values.put("year", sdt.getYear()); values.put("hints", sdt.getHints()); values.put("sort", sdt.getSort()); values.put("memorialDay", sdt.isMemorialDay()); values.put("tag", sdt.getWorkingTag()); try { db.insert("calendar", null, values); flag = true; } catch (Exception e) { flag = false; } return flag; } public boolean insert(SpendDateTag sdt) { boolean flag = false; db = dbOpenHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("moon", sdt.getMoon()); values.put("day", sdt.getDay()); values.put("year", sdt.getYear()); values.put("spendsort", sdt.getSpendSort()); values.put("spend", sdt.getSpend()); try { db.insert("spend", null, values); flag = true; } catch (Exception e) { flag = false; } return flag; } 这里创建calendar表可以创建,但是spend表创建不了,错误提示 android.database.<em>sqlite</em>.SQLiteException: no such table: spend (code 1): , while compiling: INSERT INTO spend(year,moon,day,spendsort,spend) VALUES (?,?,?,?,?) 求大神指教
sqlite的查询方式
两种查询的操作1.rawQuerySQLiteDatabase db = ....; Cursor cursor = db.rawQuery(“select * from person”, null); while (cursor.moveToNext()) { int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始 String name = c
使用android的SQLite数据库能存储多大数据
看到网上说SQLite数据库的大小是2TB,但是我觉得这个数据库不应该跟手机内存相联系吗? android上的SQLite数据库真的能容纳下2TB的数据吗???
解惑:为什么300的并发能把支持最大连接数4000数据库压死? ...
问: 为什么<em>3</em>00的并发能把<em>支持</em>最大连接数4000数据库压死? 买了一台数据库,最大连接数的参数是 4000,看起来很棒!但是 cpu 和内存并不咋好!是 2c4g的超低配制。 但是想着反正业务量也不大,不如先扛着,等业务量上来再进行升配! 没过多久,进行一次小量的营销活动。精力计算想了下,大量<em>3</em>-4台应用服务器就没问题了;然后再考虑下数据库,...
SQLite多线程下的并发操作
这两天一直在捣鼓SQLite数据库,基本的操作就不说了,比较简单,打算有空的话另起一篇博文简单总结一下。这里主要想探讨一下多路并发下的数据库操作SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,更谈不上优化,所以涉及到多路并发的情况,需要外部进行读写锁控制,否则SQLite会返回SQLITE_BUSY错误,以驳回相关请求。如果有朋友想了解SQLite相关的锁定机制,可以看看我转载的博文<em>sqlite</em>的事
(转)SQLite之大数据量批量入库
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputSt
Sqlite多表插入性能越来越慢
现象:在<em>sqlite</em>的数据库中创建2000张表,随后每隔5s向2000张表批量插入一次记录(每张表一条记录,跨表插入2000次),所有数据在一个事务中执行;数据库的pagesize = 8192,系统为win7 64位 硬盘 WD 7200rpm。 问题:刚开始插入数据是1.2s左右,当数据库文件增加到500MB左右时,写入耗时是4s左右,当数据库继续增长到800Mb左右时 ,写入耗时下降到5-6s左右; 求助:想请教内行的专家或高手,帮我分析下,写入性能在数据库达到800MB左右时,是否有可靠的方法将写入耗时降到2-<em>3</em>s【synchronize=full需要断电保护数据库,以免数据库损坏】
sqlite存储大数据量数据之浅见
老猫最近刚开始学习android,android中对于数据存储的方式有好几种,经过两天的学习,对于<em>sqlite</em>存储数据的性能和用法做一浅显的说明:      老猫从j2me开发一路走来,对于<em>sqlite</em>真是喜忧参半,囍的是在一个单机PDA环境下内嵌<em>sqlite</em>可以利用关系型数据库对数据进行操作,开发人员无须为以文本文件形式存储的数据进行查询,修改(定位而头疼),想当初三万条数据在j2me弱弱的文
Sqlite数据库并发问题
https://blog.csdn.net/mydriverc2/article/details/50955952
SQLSERVER性能的极限是多少?
一个在线服务网站,总用户预计20万,同时在线人数<em>3</em>00人,如果数据库的一张表中有1000W条数据,用户在查询他的个人资料或者自己在服务记录(40条/人,从1000W中取出40条),如果使用SQLSER
oracle处理的数据量极限是多少?
oracle能处理的<em>数据量</em>极限是多少?或者说当<em>数据量</em>达到什么规模的时候oracle处理起来查询效率什么的就会出现问题?最好有实际使用经验
请问sqlite处理百万级的数据性能如何?
听说<em>sqlite</em>很快,它的快,多少数量级以下处理数据很快,有没有性能瓶颈,处理百万级左右的数据性能如何,跟oracle处理百万级左右的数据性能差多少?
sqlite 性能
  SQLite是一个快速数据库。但“快速”这个词本身是一个主观的和不明确的词。诚实地讲,有些事情SQLite能比其它数据库做得快,也有些事情不能。这么说吧,利用SQLite提供的配置参数,SQLite是足够快速和高效的。跟大多数其它数据库一样,SQLite使用B-tree处理索引,使用B+tree处理表数据。因此,在对单表进行查询时,SQLite要快于(或至少相当于)其它数据库的速度。在一些情况下SQLite可能不如大型数据库快,但大多数这些情况是可理解的。SQLite
SQLite 插入大量数据慢的解决方法
  <em>sqlite</em> 插入数据很慢的原因:<em>sqlite</em>在没有显式使用事务的时候会为每条insert都使用事务操作,而<em>sqlite</em>数据库是以文件的形式存在磁盘中,就相当于每次访问时都要打开一次文件,如果对数据进行大量的操作,时间都耗费在I/O操作上,所以很慢。  解决方法是显式使用事务的形式提交:因为我们开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打...
SQLite事务并发访问问题?
//描述:执行命令 void ExecSqlCmd(<em>sqlite</em><em>3</em> *db, const char *sql, const char *pszThrdName) { int iRet; char *err_msg = 0; char buf[1024]; if ((iRet = <em>sqlite</em><em>3</em>_exec(db, sql, NULL, 0, &amp;err_msg)) != S...
SQLite研究——性能优化
SQLite研究——性能优化   作者:JD Space  来源:www.<em>sqlite</em>.com.cn  时间:2006-11-24  【 字体:大 中 小 】 〖 双击滚屏 〗
SQLite获取查询结果数
当查询到的记录数>256,总是显示"256 logs found." count = 记录数 if 记录数256.
sqlite文件大小问题,预分配空间问题
问题描述: <em>sqlite</em>中删除了大量数据后,数据库文件的大小没有变。 update更新数据库,文件大小翻倍。   原因及预分配实现:       当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。      其实这个有好有不好,好的地方就是相当于预分配了空间
使用QSQLite获取记录数目
使用QSQLite进行数据库编码时,需要知道数据库中已经记录的数目,可以通过下面几种方法实现: 1、浏览结果集 int count = 0; QSqlDatabase db = QSqlDatabase::database("<em>sqlite</em>1"); //建立数据库连接 QSqlQuery query(db); query.exec("SE
SQLite数据库对存储内容大小有限制吗?
打个比方,比如几张大图、文本等片共计10兆多,放在SQLite中可以吗?<em>sqlite</em>是否对存储的<em>数据量</em>大小有限制?
多线程如何并发访问SQLite数据库?
我在网上搜了一下相关的资料,发现了一种解决方法: http://www.tuicool.com/articles/vm6Bra 里面同时使用了synchronized关键字和AtomicInteger
SQLite性能和限制
性能和限制 SQLite是一个很快的数据库,但"快"这个词本身是一个主观的和模糊不清的词。坦白地讲,对于有些事情,SQLite比其他数据库做得快,也有些事情比不上其他数据库。利用SQLite提供的配置参数,SQLite是足够快速和高效的。与大多数数据库一样,SQLite使用B-tree做索引,使用B+-tree处理表。因此,在对单表进行查询时,平均而言,SQLite与其他数据库一样快(至少不
SQLite并发访问及实现
英文地址:https://github.com/dmytrodanylyk/dmytrodanylyk/blob/gh-pages/articles/Concurrent%20Database%20Access.md 假设你已经有一个自己的SQLiteOpenHelper: public class DatabaseHelper extends SQLiteOpenHelper {
sqlite 多人同时操作同一个数据库解决方案
大神们啊 我们好多人同时操作一个<em>sqlite</em>数据库文件的不同表,有什么好的解决方案? 捉急啊,有木有小伙伴遇到过啊?
sqlite的线程安全与并发
SQLite 线程安全和并发SQLite 与线程SQLite 是线程安全的。线程模型SQLite <em>支持</em>如下三种线程模型单线程模型 这种模型下,所有互斥锁都被禁用,同一时间只能由一个线程访问。多线程模型 这种模型下,一个连接在同一时间内只有一个线程使用就是安全的。串行模型 开启所有锁,可以随意访问。设置线程模型SQLite 可以通过以下三种方式进行线程模型的设置,在实际应用中选择任一一项都可以。编译...
提高 SQLite 的每秒插入性能?
Optimizing SQLite is tricky. Bulk-insert performance of a C application can vary from 85 inserts per second to over 96,000 inserts per second! Background: We are using SQLite as part of a desktop application. We have large amounts of configuration data stored in XML files that are parsed and loaded into an SQLite database for further processing when the application is initialized. SQLite is ideal for this situation because it's fast, it requires no specialized configuration, and the database is stored on disk as a single file. Rationale: Initially I was disappointed with the performance I was seeing. It turns-out that the performance of SQLite can vary significantly (both for bulk-inserts and selects) depending on how the database is configured and how you're using the API. It was not a trivial matter to figure out what all of the options and techniques were, so I thought it prudent to create this community wiki entry to share the results with Stack Overflow readers in order to save others the trouble of the same investigations. The Experiment: Rather than simply talking about performance tips in the general sense (i.e. "Use a transaction!"), I thought it best to write some C code and actually measure the impact of various options. We're going to start with some simple data: A 28 MB TAB-delimited text file (approximately 865,000 records) of the complete transit schedule for the city of Toronto My test machine is a <em>3</em>.60 GHz P4 running Windows XP. The code is compiled with Visual C++ 2005 as "Release" with "Full Optimization" (/Ox) and Favor Fast Code (/Ot). I'm using the SQLite "Amalgamation", compiled directly into my test application. The SQLite version I happen to have is a bit older (<em>3</em>.6.7), but I suspect these results will be comparable to the latest release (please leave a comment if you think otherwise). Let's write some code! The Code: A simple C program that reads the text file line-by-line, splits the string into values and then will inserts the data into an SQLite database. In this "baseline" version of the code, the database is created, but we won't actually insert data: /************************************************************* Baseline code to experiment with SQLite performance. Input data is a 28 MB TAB-delimited text file of the complete Toronto Transit System schedule/route info from http://www.toronto.ca/open/datasets/ttc-routes/ **************************************************************/ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;string.h&gt; #include "<em>sqlite</em><em>3</em>.h" #define INPUTDATA "C:\\TTC_schedule_scheduleitem_10-27-2009.txt" #define DATABASE "c:\\TTC_schedule_scheduleitem_10-27-2009.<em>sqlite</em>" #define TABLE "CREATE TABLE IF NOT EXISTS TTC (id INTEGER PRIMARY KEY, Route_ID TEXT, Branch_Code TEXT, Version INTEGER, Stop INTEGER, Vehicle_Index INTEGER, Day Integer, Time TEXT)" #define BUFFER_SIZE 256 int main(int argc, char **argv) { <em>sqlite</em><em>3</em> * db; <em>sqlite</em><em>3</em>_stmt * stmt; char * sErrMsg = 0; char * tail = 0; int nRetCode; int n = 0; clock_t cStartClock; FILE * pFile; char sInputBuf [BUFFER_SIZE] = "\0"; char * sRT = 0; /* Route */ char * sBR = 0; /* Branch */ char * sVR = 0; /* Version */ char * sST = 0; /* Stop Number */ char * sVI = 0; /* Vehicle */ char * sDT = 0; /* Date */ char * sTM = 0; /* Time */ char sSQL [BUFFER_SIZE] = "\0"; /*********************************************/ /* Open the Database and create the Schema */ <em>sqlite</em><em>3</em>_open(DATABASE, &amp;db); <em>sqlite</em><em>3</em>_exec(db, TABLE, NULL, NULL, &amp;sErrMsg); /*********************************************/ /* Open input file and import into Database*/ cStartClock = clock(); pFile = fopen (INPUTDATA,"r"); while (!feof(pFile)) { fgets (sInputBuf, BUFFER_SIZE, pFile); sRT = strtok (sInputBuf, "\t"); /* Get Route */ sBR = strtok (NULL, "\t"); /* Get Branch */ sVR = strtok (NULL, "\t"); /* Get Version */ sST = strtok (NULL, "\t"); /* Get Stop Number */ sVI = strtok (NULL, "\t"); /* Get Vehicle */ sDT = strtok (NULL, "\t"); /* Get Date */ sTM = strtok (NULL, "\t"); /* Get Time */ /* ACTUAL INSERT WILL GO HERE */ n++; } fclose (pFile); printf("Imported %d records in %4.2f seconds\n", n, (clock() - cStartClock) / (double)CLOCKS_PER_SEC); <em>sqlite</em><em>3</em>_close(db); return 0; } The "Control" Running the code as-is doesn't actually perform any database operations, but it will give us an idea of how fast the raw C file I/O and string processing operations are. Imported 86491<em>3</em> records in 0.94 seconds Great! We can do 920,000 inserts per second, provided we don't actually do any inserts :-) The "Worst-Case-Scenario" We're going to generate the SQL string using the values read from the file and invoke that SQL operation using <em>sqlite</em><em>3</em>_exec: sprintf(sSQL, "INSERT INTO TTC VALUES (NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s')", sRT, sBR, sVR, sST, sVI, sDT, sTM); <em>sqlite</em><em>3</em>_exec(db, sSQL, NULL, NULL, &amp;sErrMsg); This is going to be slow because the SQL will be compiled into VDBE code for every insert and every insert will happen in its own transaction. How slow? Imported 86491<em>3</em> records in 99<em>3</em><em>3</em>.61 seconds Yikes! 2 hours and 45 minutes! That's only 85 inserts per second. Using a Transaction By default, SQLite will evaluate every INSERT / UPDATE statement within a unique transaction. If performing a large number of inserts, it's advisable to wrap your operation in a transaction: <em>sqlite</em><em>3</em>_exec(db, "BEGIN TRANSACTION", NULL, NULL, &amp;sErrMsg); pFile = fopen (INPUTDATA,"r"); while (!feof(pFile)) { ... } fclose (pFile); <em>sqlite</em><em>3</em>_exec(db, "END TRANSACTION", NULL, NULL, &amp;sErrMsg); Imported 86491<em>3</em> records in <em>3</em>8.0<em>3</em> seconds That's better. Simply wrapping all of our inserts in a single transaction improved our performance to 2<em>3</em>,000 inserts per second. Using a Prepared Statement Using a transaction was a huge improvement, but recompiling the SQL statement for every insert doesn't make sense if we using the same SQL over-and-over. Let's use <em>sqlite</em><em>3</em>_prepare_v2 to compile our SQL statement once and then bind our parameters to that statement using <em>sqlite</em><em>3</em>_bind_text: /* Open input file and import into the database */ cStartClock = clock(); sprintf(sSQL, "INSERT INTO TTC VALUES (NULL, @RT, @BR, @VR, @ST, @VI, @DT, @TM)"); <em>sqlite</em><em>3</em>_prepare_v2(db, sSQL, BUFFER_SIZE, &amp;stmt, &amp;tail); <em>sqlite</em><em>3</em>_exec(db, "BEGIN TRANSACTION", NULL, NULL, &amp;sErrMsg); pFile = fopen (INPUTDATA,"r"); while (!feof(pFile)) { fgets (sInputBuf, BUFFER_SIZE, pFile); sRT = strtok (sInputBuf, "\t"); /* Get Route */ sBR = strtok (NULL, "\t"); /* Get Branch */ sVR = strtok (NULL, "\t"); /* Get Version */ sST = strtok (NULL, "\t"); /* Get Stop Number */ sVI = strtok (NULL, "\t"); /* Get Vehicle */ sDT = strtok (NULL, "\t"); /* Get Date */ sTM = strtok (NULL, "\t"); /* Get Time */ <em>sqlite</em><em>3</em>_bind_text(stmt, 1, sRT, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, 2, sBR, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, <em>3</em>, sVR, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, 4, sST, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, 5, sVI, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, 6, sDT, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_bind_text(stmt, 7, sTM, -1, SQLITE_TRANSIENT); <em>sqlite</em><em>3</em>_step(stmt); <em>sqlite</em><em>3</em>_clear_bindings(stmt); <em>sqlite</em><em>3</em>_reset(stmt); n++; } fclose (pFile); <em>sqlite</em><em>3</em>_exec(db, "END TRANSACTION", NULL, NULL, &amp;sErrMsg); printf("Imported %d records in %4.2f seconds\n", n, (clock() - cStartClock) / (double)CLOCKS_PER_SEC); <em>sqlite</em><em>3</em>_finalize(stmt); <em>sqlite</em><em>3</em>_close(db); return 0; Imported 86491<em>3</em> records in 16.27 seconds Nice! There's a little bit more code (don't forget to call <em>sqlite</em><em>3</em>_clear_bindings and <em>sqlite</em><em>3</em>_reset), but we've more than doubled our performance to 5<em>3</em>,000 inserts per second. PRAGMA synchronous = OFF By default, SQLite will pause after issuing a OS-level write command. This guarantees that the data is written to the disk. By setting synchronous = OFF, we are instructing SQLite to simply hand-off the data to the OS for writing and then continue. There's a chance that the database file may become corrupted if the computer suffers a catastrophic crash (or power failure) before the data is written to the platter: /* Open the database and create the schema */ <em>sqlite</em><em>3</em>_open(DATABASE, &amp;db); <em>sqlite</em><em>3</em>_exec(db, TABLE, NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "PRAGMA synchronous = OFF", NULL, NULL, &amp;sErrMsg); Imported 86491<em>3</em> records in 12.41 seconds The improvements are now smaller, but we're up to 69,600 inserts per second. PRAGMA journal_mode = MEMORY Consider storing the rollback journal in memory by evaluating PRAGMA journal_mode = MEMORY. Your transaction will be faster, but if you lose power or your program crashes during a transaction you database could be left in a corrupt state with a partially-completed transaction: /* Open the database and create the schema */ <em>sqlite</em><em>3</em>_open(DATABASE, &amp;db); <em>sqlite</em><em>3</em>_exec(db, TABLE, NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "PRAGMA journal_mode = MEMORY", NULL, NULL, &amp;sErrMsg); Imported 86491<em>3</em> records in 1<em>3</em>.50 seconds A little slower than the previous optimization at 64,000 inserts per second. PRAGMA synchronous = OFF and PRAGMA journal_mode = MEMORY Let's combine the previous two optimizations. It's a little more risky (in case of a crash), but we're just importing data (not running a bank): /* Open the database and create the schema */ <em>sqlite</em><em>3</em>_open(DATABASE, &amp;db); <em>sqlite</em><em>3</em>_exec(db, TABLE, NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "PRAGMA synchronous = OFF", NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "PRAGMA journal_mode = MEMORY", NULL, NULL, &amp;sErrMsg); Imported 86491<em>3</em> records in 12.00 seconds Fantastic! We're able to do 72,000 inserts per second. Using an In-Memory Database Just for kicks, let's build upon all of the previous optimizations and redefine the database filename so we're working entirely in RAM: #define DATABASE ":memory:" Imported 86491<em>3</em> records in 10.94 seconds It's not super-practical to store our database in RAM, but it's impressive that we can perform 79,000 inserts per second. Refactoring C Code Although not specifically an SQLite improvement, I don't like the extra char* assignment operations in the while loop. Let's quickly refactor that code to pass the output of strtok() directly into <em>sqlite</em><em>3</em>_bind_text(), and let the compiler try to speed things up for us: pFile = fopen (INPUTDATA,"r"); while (!feof(pFile)) { fgets (sInputBuf, BUFFER_SIZE, pFile); <em>sqlite</em><em>3</em>_bind_text(stmt, 1, strtok (sInputBuf, "\t"), -1, SQLITE_TRANSIENT); /* Get Route */ <em>sqlite</em><em>3</em>_bind_text(stmt, 2, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Branch */ <em>sqlite</em><em>3</em>_bind_text(stmt, <em>3</em>, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Version */ <em>sqlite</em><em>3</em>_bind_text(stmt, 4, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Stop Number */ <em>sqlite</em><em>3</em>_bind_text(stmt, 5, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Vehicle */ <em>sqlite</em><em>3</em>_bind_text(stmt, 6, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Date */ <em>sqlite</em><em>3</em>_bind_text(stmt, 7, strtok (NULL, "\t"), -1, SQLITE_TRANSIENT); /* Get Time */ <em>sqlite</em><em>3</em>_step(stmt); /* Execute the SQL Statement */ <em>sqlite</em><em>3</em>_clear_bindings(stmt); /* Clear bindings */ <em>sqlite</em><em>3</em>_reset(stmt); /* Reset VDBE */ n++; } fclose (pFile); Note: We are back to using a real database file. In-memory databases are fast, but not necessarily practical Imported 86491<em>3</em> records in 8.94 seconds A slight refactoring to the string processing code used in our parameter binding has allowed us to perform 96,700 inserts per second. I think it's safe to say that this is plenty fast. As we start to tweak other variables (i.e. page size, index creation, etc.) this will be our benchmark. Summary (so far) I hope you're still with me! The reason we started down this road is that bulk-insert performance varies so wildly with SQLite, and it's not always obvious what changes need to be made to speed-up our operation. Using the same compiler (and compiler options), the same version of SQLite and the same data we've optimized our code and our usage of SQLite to go from a worst-case scenario of 85 inserts per second to over 96,000 inserts per second! CREATE INDEX then INSERT vs. INSERT then CREATE INDEX Before we start measuring SELECT performance, we know that we'll be creating indexes. It's been suggested in one of the answers below that when doing bulk inserts, it is faster to create the index after the data has been inserted (as opposed to creating the index first then inserting the data). Let's try: Create Index then Insert Data <em>sqlite</em><em>3</em>_exec(db, "CREATE INDEX 'TTC_Stop_Index' ON 'TTC' ('Stop')", NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "BEGIN TRANSACTION", NULL, NULL, &amp;sErrMsg); ... Imported 86491<em>3</em> records in 18.1<em>3</em> seconds Insert Data then Create Index ... <em>sqlite</em><em>3</em>_exec(db, "END TRANSACTION", NULL, NULL, &amp;sErrMsg); <em>sqlite</em><em>3</em>_exec(db, "CREATE INDEX 'TTC_Stop_Index' ON 'TTC' ('Stop')", NULL, NULL, &amp;sErrMsg); Imported 86491<em>3</em> records in 1<em>3</em>.66 seconds As expected, bulk-inserts are slower if one column is indexed, but it does make a difference if the index is created after the data is inserted. Our no-index baseline is 96,000 inserts per second. Creating the index first then inserting data gives us 47,700 inserts per second, whereas inserting the data first then creating the index gives us 6<em>3</em>,<em>3</em>00 inserts per second. I'd gladly take suggestions for other scenarios to try... And will be compiling similar data for SELECT queries soon. 转载于:https://stackoverflow.com/questions/17116<em>3</em>1/improve-insert-per-second-performance-of-<em>sqlite</em>
SQLite多线程并发操作
SQLite多线程并发操作 先理清楚一个概念 多线程操作和多数据库连接操作是不同的概念 多线程操作:多线程操作数据库时可以使用一个数据库连接,也可以每个线程使用各自的数据库连接 多数据库连接操作:即每个数据库操作使用的是各自的数据库连接 SQLite默认情况下只<em>支持</em>单个数据库连接操作,多连接并发操作时会出问题,需要开启wal模式才能进行多项城并发读操作,写操作仍能不可以并发。 ...
SQLite分库还是分表,大数据量
大家好,我现在使用SQLite遇到些问题,需大家帮忙. 项目中我需要使用 SQLite数据库,含有<em>3</em>000只股票20年内数据,我现在采用的是每个股票都有一个单独的数据库,在我插入数据时,我希望可以一次
MySql,SQLServer,SQLite性能比较
工作任务:测试三个数据库的性能 测试方法:C#编写工具,对数据库进行大量数据Insert和Selectc测试 测试结果: Insert测试 Select测试 测试结果:SQLServer 和 MySql性能相差不大,Sqlite则数据<em>多大</em>几万条时明显过慢 注:可能写的代码也有问题,都加入了事务处理,过程存储没有添加
SQLite数据库大小的控制
http://www.cnblogs.com/hustcat/archive/2009/09/16/1568065.html SQLite的vacuum命令
SQLite读取全部数据
table中一共有11条记录,每个记录有三个内容"name","address","city"。现在要获取这些记录,但是我写的代码只能显示出一条记录,不知道怎么实现显示全部记录? public void readData(View v) { DatabaseClass mydb = new DatabaseClass(this); SQLiteDatabase readdata = mydb.getReadableDatabase(); TextView tv = (TextView)findViewById(R.id.readtext); Cursor c = readdata.rawQuery("select * from mylistdata", null); int[] elementId = {R.id.textView1, R.id.textView2, R.id.textView<em>3</em>}; if(c !=null) { c.moveToFirst(); while(c.isAfterLast() == false) { listData = new ArrayList(); String name = c.getString(c.getColumnIndex(DatabaseClass.NAME)); String address = c.getString(c.getColumnIndex(DatabaseClass.ADDRESS)); String city = c.getString(c.getColumnIndex(DatabaseClass.CITY)); listData.add(new GenericListItem(new String[]{name,address,city})); listAdapter = new GenericListAdapter(getApplicationContext(), R.layout.list_layout, listData, elementId); result.setAdapter(listAdapter); c.moveToNext(); } }
android sqlite3数据量存储
楼主google了半天没有发现解决方案,只能来发帖求大神看看 楼主所在项目弄了个app需要写入大量数据,表也比较多。android采用的<em>sqlite</em><em>3</em>数据库。 现在有两个问题1.数据库文件容易损坏 2
FastDB和SQLite的性能测试。下载
详细介绍在这里: http://blog.csdn.net/RookieRock/archive/2010/12/06/6057<em>3</em><em>3</em>8.aspx 相关下载链接://download.csdn.net/
解决sqlite删除数据后,文件大小不变问题
说了这么多,没进主题,我的主题是给Sqlite在删除数据后擦屁股。 大家或许发现了,当你在<em>sqlite</em>中删除了大量数据后,数据库文件的大小还是那样,没有变。 就用我的项目来说,<em>3</em>M的数据删除后,<em>sqlite</em>的.db文件依然是<em>3</em>M,而我要的结果实际上只有<em>3</em>5K,在压缩一下也就10几K了。为什么会出现这个问题,SqlCe的.sdf文件是即删即减的。   原因是: 当你从Sqlite删除数据后
sqlite解决并发性问题
验证了<em>sqlite</em>脚本的并发性,弱爆了,一个脚本写,一个脚本查询,查询的脚本运行down掉了。 如何处理这种并发性问题? 使用linux系统中的消息队列完美解决,将写、查询操作都放到一个消息队列中,获取消息队列中数据进行先进先出的数据库读写操作
并发访问sqlite如何做到线程安全?
该文由dmytrodanylyk.com/articles/co…翻译而来假设我们的Android项目工程中有一个SQLiteOpenHelper:public class DatabaseHelper extends SQLiteOpenHelper { ... }复制代码现在我们有Thread 1和Thread 2两个线程要往数据库中插入数据: // Thread 1 Conte...
sqlite3的各类大小限制总结
<em>sqlite</em><em>3</em>的各类大小限制总结
sqlite3 解决并发读写冲突的问题
1 #include &quot;stdafx.h&quot; 2 #include &quot;<em>sqlite</em><em>3</em>.h&quot; <em>3</em> #include &amp;lt;iostream&amp;gt; 4 #include &amp;lt;process.h&amp;gt; 5 6 //sqllite 相关变量 7 <em>sqlite</em><em>3</em> *sql_db; 8 char *sql_ErrMsg; 9 int sql_r...
SQLite3并发问题
1. https://blog.csdn.net/tajon1226/article/details/54864<em>3</em>22 2. https://blog.csdn.net/u0122188<em>3</em>8/article/details/79<em>3</em>62929 <em>3</em>. http://blog.51cto.com/linzimo777/1544202 4. 数据库创建时指定的线程模式:https://www.cnb...
如何提高效率SQLITE 大数据量操作 效率
如何提高效率SQLITE 大<em>数据量</em>操作 效率
Sqlite3最大列数量限制
实际使用<em>sqlite</em><em>3</em>数据库发现,用alter往表格里添加column,每次跑到2000左右总会出错, 写了个脚本测试发现确实如此: Traceback (most recent call last):   File ".\<em>sqlite</em>_col_test.py", line 91, in     conn.execute(sql) <em>sqlite</em><em>3</em>.OperationalError: t
Sqlite 数据库怎么得到指定行数的记录?
比如我要得到50条数据,我写的SQLite的语句是: SELECT dwID,szName FROM DevItem ORDER BY dwID LIMIT 0,50 可问题是没有50条它也会返回50
如何提高效率SQLITE 大数据量操作效率
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete("test1.db<em>3</em>"); SQLiteConnection.CreateFil
SQLite数据库中删除数据后,文件大小没有变化
我用SQLite Developer可视化工具创建了数据库和表,在表里插入了一百万的数据,可是我把数据删除后,文件大小仍然不变,网上搜了很多资料,都说执行命令PRAGMA auto_vacuum ,真
Sqlite大数据量查询优化比较-转
标题写的有些大了…… 我做的一个PHP玩具用的是Sqlite数据库,昨天某网站采集了40<em>3</em>9篇文章,发现页面打开速度慢的要死,看了一下耗时,发现<em>sqlite</em>在<em>数据量</em>比较大(4000算大?……我觉得挺大的了)的时候执行order by xxx desc会变得很慢…… 1、select * from blog_cms where status=1 limit 0,10 耗时15ms
Sqlite3并发读写注意事项
最近项目中涉及到<em>sqlite</em>并发读写的问题,参考一些文档并结合自己的实践,对<em>sqlite</em><em>3</em>并发问题总结了几点: <em>sqlite</em><em>3</em>的锁及事务类型 <em>sqlite</em><em>3</em>总共有三种事务类型:BEGIN[DEFERRED /IMMEDIATE/ EXCLUSIVE] TRANSCATION,五种锁,按锁的级别依次是:UNLOCKED /SHARED /RESERVERD /PENDING /EXCLUSI...
SQLITE3 删除大量数据后,db文件大小未变小解决方案
直接执行语句(没错,就是一个单词而已): VACUUM
这个产品能支持多大数据量
经常有用户会问这个问题,你家的产品能处理<em>多大</em><em>数据量</em>?似乎是这个值越大产品就越牛。 这个问题,其实没<em>多大</em>意义。 能处理<em>多大</em>的<em>数据量</em>,还有个很关键的因素是期望的响应时间,在脱离这个因素单纯谈大数据产品的数据处理量,就不知道怎么回答了。 考虑只有单台机器的简单情况。如果是希望秒级响应的 OLAP 式汇总,那么 GB 级都是挺大的数据了,几乎不可能有什么产品能处理 TB 级数据(除非有巨大内存)。而...
sqlite 数据库性能调优
一 、完整性检查    完整性检查 ,是保障 数据库可用 ,app可用的 ,程序启动后,优先要做的事情    数据库损坏的表现: “database disk image is malformed”   1 检查方式:       (1) PRAGMA schema.integrity_check;          (2) PRAGMA schema.quick_check;    ...
SQLite查询记录总数
public int getCount() { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(id) from table",null); cursor.moveToFirst(); Long count = cursor...
请问下SQLite怎么获得id的最大值?谢谢各位
能用select max(id) from table吗?execSQL好像不能执行select语句,并且这个函数没有返回值,我想取得id的最大值存到一个变量里面,怎么弄啊,谢谢
sqlite并发sqlite并发sqlite并发
<em>sqlite</em>并发<em>sqlite</em>并发<em>sqlite</em>并发<em>sqlite</em>并发<em>sqlite</em>并发<em>sqlite</em>并发
SQLite 大批量数据 新增 / 修改 提升效率的办法
一、新增SQLite中的新增默认是单个事务控制的,一次新增就是一次数据库操作,一次事务。如果几千次for循环操作,必然存在效率问题。下面代码是通过事务控制的方式提升效率:publicvoid addList(List&amp;lt;GroupMember&amp;gt; listMember) {    StringBuffer sbSQL = newStringBuffer();         SQLiteD...
java多线程并发访问sqlite数据库如何同步和加锁
如题, 使用java语言,<em>sqlite</em>数据如何解决多线程同步锁的问题
谁见到了千年虫,什么样子? :)
千年一会,也没有见到。
sqlite 查询速度比较
以下是在  macOS 上使用 SQLPro for SQLite Read Only 版进行的查询速度对比。   select word from words_table where word &amp;gt;= '小' and word &amp;lt; '少' order by wordfrq desc           0.4s select word,wordfrq from words_tab...
sqlite 获取表内列值的最大值
请问我现在有一列数据分别是 : AAAA0001 AAAA0002 AAAA000<em>3</em> AAAA0004 用<em>sqlite</em>语句获取后四位数字的最大值,求大神帮忙。
有关SQLite的优缺点
★技术上的优点和特性 SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,<em>支持</em>SQL92标准中常用的玩意儿(比如视图、事务、触发器等)就是理所当然的了,咱今天就不细说了。今天主要聊聊一些有点特色的玩意儿。 ◇轻量级 先说它的第一个特色:轻量级。想必SQLite的作者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。 SQLite和C/S模式的数据库软件不同
Qt中针对SQLite的并发访问
问题:SQLite是一种文件级别的数据库,因此他的锁机制也是文件级别的,只<em>支持</em>并发读访问数据库,不<em>支持</em>并发写,也不<em>支持</em>并发读写。只要有一个线程进行写操作,其他线程都将等待,如果同时执行读写操作,会返回SQLite_Busy。因此对于写操作是需要串行执行的。 解决方案: 1.最初是想通过循环执行,如果query.exec执行失败,那么会循环直到执行成功为止,但是我看了下Qt的文档,以及网上查了...
sqlite 稳定,并发怎么样
现在想做一个进销存,可能会有20人同时一起用 不知道到是选择 <em>sqlite</em> 还是 access 大家给给意见吧
SQLite之大数据量批量入库
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputSt
sqlite 解决并发问题 求助
打算使用<em>sqlite</em>+tomcat 实现一个web控制页面 但是我试了一下 两个线程 同时写一个表 或者 同时读写一个表 都会发生锁定的情况 请问如何解决这样的并发操作,由于这个web前端并发的量并不
sqlite 使用笔记
http://www.<em>sqlite</em>tutorial.net/ https://www.<em>sqlite</em>.org/cli.html 在shell终端使用<em>sqlite</em><em>3</em> # 创建表 create table if not exists accession(accession text,accession_version text,taxid text,gi text); # 创建索引 cre...
SQLite数据库扫盲
今天注意到SQLite <em>3</em>.6.11(上个月发布的)增加了一个我期待已久的online backup接口,激动之余就顺便和大伙儿聊一下SQLite数据库。本帖权当是SQLite扫盲,如果你对SQLite已经很熟悉,本文就不必再看了。 ★技术上的优点和特性 SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,<em>支持</em>SQL92标准中常用的玩意儿(比如视图、事务、触发器等
没辄了,SQLite大数据量性能问题,跪求大家想辄
大家好,我的问题是,现在要把8000000条记录入到数据库里面,为了方便查询建了索引,必须得建的,尽管用差不多5000000条记录索引字段是相同的,也用了事务,现在当插入数据慢慢变大,数据插入也就越来
提升SQLite数据插入效率低、速度慢的方法
挖个坑
MySQL和Sqlite3性能测试
测试条件:i5-4460@<em>3</em>.2G,普通机械硬盘。MySql: 5.0.45-community-nt,<em>3</em>2bit, innodb引擎,innodb_flush_log_at_trx_commit=0Sqlite<em>3</em>: Synchronous=Off,LockingMode = ExclusiveTableScript:MySql:CREATE TABLE `test` (  `id` int(10...
sqlite如何获取数据表的大小
在<em>sqlite</em>中如何能够获取到某个数据表所占用的空间大小?或者是占用的页表信息?
mysql 数据库中一个表最多可存多少记录,在线等
mysql 数据库中一个表中,只有四个字段,最多可存多少条记录, 谢谢大家,小弟想放20w条,不知可不可以,
并发操作Sqlite3
1. Sqlite<em>3</em>可以设置脏读模式,在一个线程写数据的同时另一个线程可以读数据。设置方法:http://blog.csdn.net/u011726005/article/details/76944684 。 2. 多个线程可以同时进行读操作,但是同一时刻只能有一个线程去进行写操作,并且在一个线程进行写操作的时候,其他线程是不能进行读操作的。当一个线程正在写操作时,其他线程的读写都会返回操作失败
sqllite可以处理多大数据量
有一份数据,<em>数据量</em>大概一千万到一千五百万行之间 要放进一个表里进行分析,听说sqllite很方便,不知道用它处理行不行
.Net下SQLServer和SQLite查询100万条数据的效率怎么会SqlServer速度快点,而且还快这么多(看图),如何提高查询效率呢?
SQlite的查询时间: SQLServer的查询时间: SQL查询语句:
Android 往Sqlitedatabase中插入大量数据效率问题,40倍效率加速你的操作
情景:我现在要往<em>sqlite</em> database中的表中(R_USER_QUESTION_DO_HISTORY)插入一万条数据1.我的代码: public void setUpDataBaseForUser(String userID) { String[] column = { Config.COLUMN_USERID, };
SQLLite操作百万级数据之优化篇
描述:SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。 描述: SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默
Realm、WCDB与SQLite移动数据库性能对比测试
还在通过FMDB用繁琐的SQL语句操作移动端数据库吗?要不要试试Realm或者WCDB?
SQLITE和ACCESS性能对比测试
一般来说,传统的桌面应用,尤其是ms平台下,多用access数据库,近年,sqllite越来越流行,而且其对手机终端的<em>支持</em>,更使得起使用率越来越高.access和<em>sqlite</em>有太多的相似之处.可他们性能究竟怎么样呢,我查询了一些对比资料,如下: SQLite介绍 在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,
转 -- 内存数据库性能评测之SQLite数据库
原址如下: http://tech.it168.com/a2012/1016/1408/000001408814_all.shtml 内存数据库性能评测之SQLite数据库 【IT168 专稿】SQLite是一款轻型的数据库,它占用资源非常的低,同时能够跟很多程序语言相结合,但是<em>支持</em>的SQL语句不会逊色于其他开源数据库。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资
详细了解SQLITE 优缺点 性能测试
什么是SQLITE:   SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它,你可以免费用于任何应用,包括商业应用,另外,它还<em>支持</em>各种平台和开发工具,这点是某些数据库(比如Access、DBISAM)。 SQLite是一种嵌入式数据库,它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同
sqlite真不是一般的慢啊.我晕倒了..
我的是winform 采集数据用的,原来用access.. 但本机mdac好像坏掉了,access里连insert ,select 简单的都要出错. 只好用<em>sqlite</em>,可是速度这个慢.. 插入几条的
sqlite性能如何,大家怎么看?
看了很多资料,都说<em>sqlite</em>的并发性能不好...有谁用过或者测试过吗? 请谈谈!
SQLite的效率问题
 这段时间在做一个项目,从SQLite里读取数据,大概有400多张表,总记录数有7万左右,读取每张表,然后执行step将每条记录执行一遍,共了大概<em>3</em>秒,这个时间正常吗?能不能把时间再减少一点。 str
SQlite DB 10w级插入数据慢, 请问怎么优化
问题是这样的, 我们现在是用Sqlite DB 存储一部分数据, 插入的地方已经开启了事务, 每次插入100条数据(有打算改成1000或者更高, 但是由于是并发执行, 对于内存可能有点小问题, 但是问
SQLite插入1000行数据居然耗时9秒。。
以下为代码 static void Main(string args) { string directoryName = Path.GetDirectoryName(Assembly.GetExecu
提升SQLITE插入、查询效率的方法
首先,建立数据库rc = <em>sqlite</em><em>3</em>_exec(db, &quot;create table if not exists testinfo (id integer primary key, age integer, height text, weight text)&quot;, NULL, NULL, &amp;amp;zErr);插入篇:1、<em>sqlite</em><em>3</em>_exec()通常,我们使用<em>sqlite</em><em>3</em>_exec()函数来...
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
32位嵌入式微处理器一览 .doc下载
32位嵌入式微处理器一览 .doc,非超好的文档,强烈建议你下载。 相关下载链接:[url=//download.csdn.net/download/lichengtongxiazai/2615997?utm_source=bbsseo]//download.csdn.net/download/lichengtongxiazai/2615997?utm_source=bbsseo[/url]
基于java的SSHDemo实例下载
一个简单SSH实例,搭好了框架,用eclipse等开发工具导入即可,有user类,实现了登陆、增删改功能。 相关下载链接:[url=//download.csdn.net/download/gintoki223/8635269?utm_source=bbsseo]//download.csdn.net/download/gintoki223/8635269?utm_source=bbsseo[/url]
网络矿工数据采集下载
数据采集软件 相关下载链接:[url=//download.csdn.net/download/ph20101010/9635519?utm_source=bbsseo]//download.csdn.net/download/ph20101010/9635519?utm_source=bbsseo[/url]
相关热词 c#交错数组 c# task停止 c#使用mongodb c#入门经典第七版 c#设置超时程序 c#一个日期格式加上时分 c# 按行读取excel c#画图固定 c# 读取dataset 如何c#按钮透明
我们是很有底线的