两个数据库应用程序,一个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性能?
答案 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
下运行您的查询并尝试消除昂贵的扫描。