我正在使用 SQLiteDatabase ( http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html )在 Android 上使用 SQLite
我正在开发一个圣经应用程序,它有一个包含以下列的表:
- 书:int
- 章节:int
- 诗句:诠释
- wordIdx : 整数
- 强ID:字符串
- 词:字符串
每个句子都被分解成一系列 strongId/word 对,因此 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 条,但查询仍然需要很长时间
它需要 30 秒的时间来生成两个章节的文本以显示给用户(使用临时视图和不使用临时视图)。如果我设置一个虚拟单词列表以避免数据库查询,大约需要 5 秒。
我怎样才能提高这个性能?似乎临时视图对性能没有我希望的影响。