SD カードに 168 MB の sqlite データベースがあり、それぞれに 1000 を超えるレコードを持つ 30 近くのテーブルが含まれています。このクエリを使用して、データベースから結果を取得しています。
select code mfr_code, name mfr_name
from manufacturers
where mfgr_type_code < 5 and code in (
select mfgr_code
from equipment_groups
)
このクエリは、カーブ 5.0 で 30 秒以上、torch 6.0 デバイスで 1 分以上かかります。
サブクエリ
SELECT mfgr_code FROM equipment_groups
50,000 件を超えるレコードを取得しています。
Android でのテストに 5 秒もかからない場合の同じクエリ。ブラックベリーの問題は何ですか。
この処理時間を短縮する他の方法はありますか。
編集
このコードを使用して、データベースから結果を取得しています
Vector vehical_type = new vector()
Cursor cursor = statement.getCursor();
while (cursor.next()) {
Row row = cursor.getRow();
vehical_type.addElement(row.getString(0));
}
初めて実行されたときのcursor.next()は、INを使用したクエリで10を超えています。残りの 20 秒はループによって完了します。
そこで、以下に提案するように EXISTS でクエリを使用しました。パフォーマンスが大幅に向上します。
しかし、私が観察したのは、同じcursor.next()が初めて1秒かかり、ループを完了するのに10秒近くかかっていることです。ここで、ループのパフォーマンスがデータ全体をフェッチするための合計応答時間に影響を与えるという結論に達しました。
カーソルをループする以外に、データをフェッチする他の方法はありますか。
パフォーマンスをさらに向上させる可能性はありますか。