Android数据库代码优化(3) - 从Cursor中读数据

在讨论SQLite数据库本身之前还是继续说Cursor. 这次我们说说从Cursor中读取数据

 

1. getColumnIndex取数据的耗时相当甚至更多

 

getColumnIndex本身的耗时大约是几十微秒的量级v7plus上实测取三个getColumnIndex的时间是76微秒看起来不多不过我们对比一下从Cursor中取这三个字段所花的时间v7plus上实测值是39微秒

这样算下来就显出getColumnIndex的问题了相当于多花了读取三个字段的时间或者更多

 

其实在query的时候字段的位置是确知的通过定义一些常量值可以将这部分时间节省出来尤其是从Cursor中读取大量的数据的时候节约掉getColumnIndex的时间是可比较可观的量我在实测中的结果是, getColumnIndex可以占到从Cursor中读取数据的20%的时间

有一次的打点结果显示在从数据库读取一个表的时间中, query语句只占了7.3%的时间getColumnIndex占了15.9%的时间.

 

2. query的时候只选取需要的字段就好列表和详情不要用同一条查询语句

 

column index的数据是默认就会放在Cursor里的我们能省掉的是不去读它的时间但是query哪些列是我们可以控制的query必要的列可以节省从数据库写Cursor的时间

 

具体到业务逻辑上查询可以分成两种一种是查询列表这时候数据量大但是需要的字段少另外一种是查询详情需要全字段但是一次一般也就查询一个或者很有限的几个这两种要分别去实现

 

关于Cursor就说这多下一节我们开始请主角出场SQLiteDatabase. 

 

你可能感兴趣的:(android,sqlite,Cursor)