iOS9 sqlite3 执行查询语句十分缓慢的解决方案

本文探讨了一款医疗互联网APP在iOS9上遇到sqlite3执行查询语句缓慢的问题,特别是多表查询。通过对问题的定位,发现特定子查询是性能瓶颈。解决方案是通过为影响性能的列建立索引,显著提高了查询速度,而避免了内存组合数据导致的效率问题。文章还介绍了如何在sqlite中添加索引以及查看是否使用索引的方法。
摘要由CSDN通过智能技术生成

一、问题来源

我所就职的公司是一家医疗互联网企业,作为一名iOS开发,目前我参与开发迭代的是一款面向医生用户的APP,这款APP的主要功能之一就是随手记病历,前不久我们的运营同学接到用户反馈,在病历数量较多(达到数千份),一些操作十分卡顿。
这个问题很容易就解决了(一些耗时操作卡住了主线程),不过在解决这个问题的过程中,反而发现了更大了一个问题,在sqlite中iOS8和iOS9执行一些相同的查询语句,效率相差十分巨大!

二、问题表现

我使用了4000左右的数据量进行了测试,发现执行同一条包含子查询共四个在表在内的查询语句:

  • 在iPhone6 Plus iOS8.0.2真机上面花费0.8秒左右的时间。
  • 在iPhone6 iOS9.1真机上面花费48秒左右的时间。

三、问题定位

作为一名开发者,应该都会对这类怪异的问题感兴趣(难道是恶趣味),可能是解决这类问题比较有成就感吧。
我也不例外,我就又花费了一些时间尝试去查一些解决方案,遗憾的是,百度、google之后并没有找到太有用的东西,只在stackoverflow上面找到一个相同的问题,然而并没有人回答,只是本人通过修改SQL查询语句解决了在iOS9查询速度十分慢的问题。

1.总体问题

没办法,看来不能走捷径了,于是做了进一步测试,发现分别在iOS8和iOS9的真机上面执行一些查询语句:

  • 单表查询数据量即使达到上万,执行相同的sqlite查询操作性能并没有明显的差别,耗时并不会很多(取决于查询条件和单表列数等)。
  • 大部分多表查询在数据量大时(数千),性能并不会有明显差异。
  • 部分多表查询数据量大时(数千),执行相同的sqlite查询操作性能上会有较大差别。

看来问题就出在***多表查询***上了。

2.具体问题

由于公司相关信息不便公开,这里以另外的类似场景举例做描述。

  1. 假如对全国的中学做了以下一些信息统计:学校信息、学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值