0

HTML5 WebSql と ADT で構築された Android の 2 つのデータベース アプリ。どちらもまったく同じ 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 は、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 は上記のクエリを 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 に答える