0

两个数据库应用程序,一个 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

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

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

在 HTC-1V 硬件上测试 HTML5 在 250 毫秒内运行上述查询,在 Android 应用程序上仅需要 4000 毫秒才能打开光标。是否可以从 Android 应用程序获得 WebSql 性能?

4

1 回答 1

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);

此外,请参阅有关如何在 Android 上优化查询的答案EXPLAIN QUERY PLAN,但基本思想是在其下运行查询并尝试消除昂贵的扫描。

于 2013-02-27T05:42:00.513 回答