首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite优化读取性能

sqlite优化读取性能
EN

Stack Overflow用户
提问于 2012-03-19 02:17:26
回答 1查看 3K关注 0票数 1

我在IPhone应用程序中使用sqlite作为只读数据库。一个用例涉及发出许多select语句,每个语句返回大约3行。不可能减少查询的数量,因为下一个查询的参数取决于前一个查询的结果。查询本身非常简单:

代码语言:javascript
复制
SELECT int1, int2, int3, int4 , int5, int6, int7 FROM sometable WHERE (int1 = ? AND int2 = ?) or (int3 = ? and int4 = ?) ORDER BY ROWID

该表有一个索引(int1,int2)和一个索引(int3,int4)。所有int都有整型数据类型

查询是通过C-API完成的。使用sqlite3_prepare_v2()编译语句,并将其用于所有查询。在每次查询之后,在绑定新参数之前对语句执行sqlite3_reset()。

使用标志SQLITE_OPEN_READONLY和SQLITE_OPEN_NOMUTEX打开数据库文件。

在xAccess上的分析显示,大部分时间都花在了sqlite3VdbeExec->sqlite3BtreeBeginTrans->sqlite3PagerSharedLock->line pVfs -> IPhone () sqlite3_step()上。

我不是sqlite专家,但对我来说,似乎有时间浪费在不必要的锁定上。这是不必要的,因为它可以保证在此查询完成时不会对数据库进行其他访问。我也想知道sqlite3BtreeBeginTrans。是否为select语句创建事务?

谁能告诉我如何进一步优化这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-19 23:03:09

来自sqlite-user mailing list的正确答案是使用独占锁定模式:

将锁定模式设置为独占有三个原因:... 2)减少了文件系统操作的系统调用次数,这可能会导致较小的性能提升。

加速40%左右...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9760919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档