android数据库查询,用的是郭神的数据库框架LitePal,前期测试阶段数据量少没发现问题,app正式上线后由于数据量比较大,导致从数据库取数据非常慢,取20条数据就要十几秒。排查后发现是这样的:
我的数据封装类A:
public class Form extends DataSupport {
private String account;
private String name;
private String code;
private String date;
private List<String> list;
private List<String> timeList;
......
}
这里有个List<String> list的成员变量,该变量用于存储主要数据,一般都会放入几百条甚至上千条数据,所以如果查询的时候把所有字段都带出来的话就会非常慢,例如这样:
ArrayList<Form> list = DataSupport.where("account = ?", Global.account).order("time desc").limit(20).find(Form.class);
改成以下就可以避免:
ArrayList<Form> list = DataSupport.select("name", "date", "time").where("account = ?", Global.account).order("time desc").limit(20).find(Form.class);
通过select函数只取需要的字段,速度又回到非常快了。