文章目录
一、问题来源
我所就职的公司是一家医疗互联网企业,作为一名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.具体问题
由于公司相关信息不便公开,这里以另外的类似场景举例做描述。
-
假如对全国的中学做了以下一些信息统计:学校信息、学