我是Android编程的新手,但我很习惯使用SQLite数据库。糟糕的SQLite实现?第一次数据访问的方式太慢
我的应用程序打开SD卡上的SQLite3数据库,并运行一个相对复杂的查询(5联接,1子查询,2 where子句)使用
SQLiteDatabase.rawQuery
public Cursor queryDataBase(String sql, String[] selectionArgs){ Cursor c = myDB.rawQuery(sql, selectionArgs); return c; }
SQL语句由下式给出硬编码
String
。- 查询返回585行,共24列。
- 我不得不这样做之间的存储空间和索引的权衡,但所有大表(约〜40 000项,目前)正在使用的索引,SQLite的显示了查询:
Steps: 155 , Sorts: 0, AutoIdx: 1077
我不是使用主键,因此我也没有重命名为“_id”。
rawQuery的执行速度相对较快,执行时间约为2 ms。
- 访问这些数据会花费太多时间,通过c.moveToFirst(),执行时间约为1700毫秒!(与Cursor.getRowCount()相同,或者显然是首次访问实际结果集)。
- 在PC(2 GHz,1 GB RAM,SATA2 HDD)上使用例如SQLiteSpy需要15 ms来显示结果集。
- 在PC上使用C++实现它,它也是15毫秒高达30毫秒。
那么我在这里错过了什么?我的800 MHz,2 GB RAM,MicroSD手机实际上可能会慢120倍吗?
SD是很多甚至比IDE慢。 – 2010-12-08 19:48:00