Android SQLite比HTML5 WebSql慢得多
两个数据库应用程序,一个HTML5WebSQL和一个用ADT构建的Android。两者都使用完全相同的Sqlite数据库,因此使用相同的模式、表和索引Android SQLite比HTML5 WebSql慢得多,android,sqlite,Android,Sqlite,两个数据库应用程序,一个HTML5WebSQL和一个用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
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性能吗?很难说确切的原因,但我可以告诉您应该创建哪些索引以使其运行更快(除非您已经有了这些索引):
另外,请参阅如何在Android上优化查询,但基本思想是在下运行查询,并尝试消除昂贵的扫描。您在用什么进行基准测试?4000毫秒只是为了得到一个可读的数据库,运行一个小查询并得到一个游标,这有点荒谬。我从来没有经历过。在一个有几千条记录的数据集上,我从来没有看到过应用程序的明显减速。@jlindenbaum,您好,这是一个35mb的数据库,xy表有264k行。对于基准测试,我们比较了start和finish Date.getTime()。还以循环方式运行查询并计算平均时间。您是在模拟器上运行查询,还是在真实设备上运行查询?@Stéphane这是在HTC 1V硬件上运行的,这是一款最新的智能手机。谢谢,但两个数据库上的索引相同,并使用EXPLAIN进行了双重检查。还尝试了链接中描述的.setMaxSqlCacheSize()方法,该方法看起来很有希望,但没有改变结果。
CREATE INDEX road__id_road_idx ON road (id_road);
CREATE INDEX xy__id_road_lat_lon_idx ON xy (id_road, lat, lon);