Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite比HTML5 WebSql慢得多_Android_Sqlite - Fatal编程技术网

Android SQLite比HTML5 WebSql慢得多

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

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