SQLiteDatabase を使用して Android で SQLite を使用しています ( http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html )
次の列を持つ単一のテーブルを持つ聖書アプリケーションを開発しています。
- ブック : int
- チャプター : int
- 詩:int
- wordIdx : int
- strongId : 文字列
- 単語 : 文字列
各文は一連の strongId/単語のペアに分割されるため、wordIdx は単語の順序付けに使用され、strongId はコンコーダンスへの単純なインデックスであり、word は文内の単語です。
だから私は300,000行を持っていますボトルネックは、各節の単語のリストを取得するための私のクエリであるようです:
私のSQLは事実上これです:
SELECT strongId, word FROM ? WHERE book=? AND chapter=? AND verse=?
コードは次のとおりです。
Cursor cursor = mBible.database().rawQuery("SELECT " + KEY_STRONGID + "," + KEY_WORD + " FROM " + tableName() + " WHERE " + KEY_BOOK + "=? AND " + KEY_CHAPTER + "=? AND " + KEY_VERSE + "=?" , new String[] { String.valueOf(mChapter.mBook.index()), String.valueOf(mChapter.index()), String.valueOf(verse) });
cursor.moveToFirst();
mWordList = new ArrayList<Word>();
do {
mWordList.add(new Word(cursor.getString(1), cursor.getString(0)));
} while (cursor.moveToNext());
ここで、各章を独自の一時ビューに入れてみました (CREATE TEMP VIEW を使用)。これにより、私の例ではレコードが約 400 に削減されますが、クエリにはまだ時間がかかります。
ユーザーに表示する 2 つの章のテキストを生成するのに約 30 秒かかります (一時ビューを使用し、一時ビューを使用しません)。データベース クエリを回避するためにダミーの単語リストを設定すると、約 5 秒かかります。
どうすればこれのパフォーマンスを改善できますか? 私が望んでいたように、一時的なビューがパフォーマンスに影響を与えていないようです。