文章目录
一、问题来源
我所就职的公司是一家医疗互联网企业,作为一名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查询操作性能上会有较大差别。
看来问题就出在***多表查询***上了。<

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

被折叠的 条评论
为什么被折叠?



