我是Android编程的新手,但是我很习惯使用SQLite数据库。
我的应用程序在SD卡上打开SQLite3数据库并使用SQLiteDatabase.rawQuery
public Cursor queryDataBase(String sql, String[] selectionArgs){
Cursor c = myDB.rawQuery(sql, selectionArgs);
return c;
}
SQL语句由硬编码String
提供。
Steps: 155 , Sorts: 0, AutoIdx: 1077
我没有使用主键,因此我也没有将任何内容重命名为“_id”。
执行rawQuery相对较快,执行时间约为 2 ms 。
那我在这里错过了什么?我的手机800 MHz,2 GB RAM,MicroSD实际上可能慢了约120倍吗?
答案 0 :(得分:2)
rawQuery的执行速度相对较快,执行时间约为2毫秒。
访问此数据需要花费太多时间,例如通过c.moveToFirst(),执行时间大约是1700毫秒! (Cursor.getRowCount()相同,或者显然是第一次访问实际结果集)。
这就是关键:rawQuery实际上并没有执行查询,但是直到第一次需要使用查询结果时才会延迟。
答案 1 :(得分:1)
除了仍然比在PC上慢一点,问题似乎是处理未编制索引的字段。
虽然原始帖子中的配置速度慢了大约120倍,但我尝试使用完整的索引数据库(这意味着在需要的地方无处不在的索引和主键),而现在在PC上需要9毫秒的查询“只有“慢8倍:执行时间约为75毫秒。
这当然是一个非常令人失望的结果,因为我不想每次都使用索引,即使在非常小的桌子上也是如此。