Android SQLite比HTML5 WebSql慢得多

时间:2013-02-26 23:53:44

标签: android sqlite

两个数据库应用程序,一个HTML5 WebSql和一个使用ADT构建的Android。两者都使用完全相同的Sqlite数据库,因此使用相同的模式,表和索引。

SELECT
    road.description,
    xy.lat AS lat,
    xy.lon AS lon,
    road.id_road AS id_road
FROM xy
INNER JOIN road
  ON xy.id_road = road.ID_ROAD
WHERE xy.lat BETWEEN -36.89804010977648
                 AND -36.878040110223516
  AND xy.lon BETWEEN 174.78966425022352
                 AND 174.8096642497765

网络应用使用db.transaction。 Android SQL在一个类中运行,该类使用在ASync进程中创建的数据库对象扩展SQLiteOpenHelper。

SQLiteDatabase dbr = this.getReadableDatabase();
Cursor cursor = dbr.rawQuery(sql, null);
if( cursor.moveToFirst()){
    // loop through and analyse approx 400 results
}

在HTC-1V硬件上测试HTML5在250ms运行上述查询,在Android应用程序上只需要4000ms就可以打开游标。是否有可能从Android应用程序获得WebSql性能?

1 个答案:

答案 0 :(得分:0)

很难确切地说出原因,但我可以告诉你应该创建哪些索引以使其更快地工作(除非你已经有了这些索引):

CREATE INDEX road__id_road_idx       ON road (id_road);
CREATE INDEX xy__id_road_lat_lon_idx ON xy   (id_road, lat, lon);

此外,请参阅this answer了解如何在Android上优化您的查询,但基本的想法是在EXPLAIN QUERY PLAN下运行您的查询并尝试消除昂贵的扫描。