query = "SELECT id AS _id, entry_id, r_ele_value, k_ele_value, gloss_value FROM search_eng WHERE r_ele_value LIKE '"+hiragana+"%' LIMIT 20";
这个查询工作很慢。所以我在SQLite Expert Professional中为 r_ele_value 创建了索引。
如何使用创建的索引来加快从大表(约 20MB)中检索数据?
query = "SELECT id AS _id, entry_id, r_ele_value, k_ele_value, gloss_value FROM search_eng WHERE r_ele_value LIKE '"+hiragana+"%' LIMIT 20";
这个查询工作很慢。所以我在SQLite Expert Professional中为 r_ele_value 创建了索引。
如何使用创建的索引来加快从大表(约 20MB)中检索数据?
为了能够使用带有LIKE
前缀查找的索引,
TEXT
affinity,即声明为TEXT
orVARCHAR
或类似的东西;和索引必须不区分大小写:
CREATE INDEX ele_value_idx ON search_eng(r_ele_value COLLATE NOCASE)
对于大型数据库中的搜索,您实际上应该使用 SQLite 查看 FTS3 表。此扩展旨在执行全文搜索,并且比LIKE
.
这是一个解释一般搜索在 Android 应用程序上的链接:http: //developer.android.com/guide/topics/search/search-dialog.html#PerformingSearch
此链接显示如何创建和访问用于查询的虚拟表:http: //developer.android.com/training/search/search.html
此外,此博客上的完整示例:http: //blog.andresteingress.com/2011/09/30/android-quick-tip-using-sqlite-fts-tables/
基本上必须创建一个虚拟表,例如这个查询:
private static final String FTS_TABLE_CREATE =
"CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE +
" USING fts3 (" +
COL_WORD + ", " +
COL_DEFINITION + ")";
然后可以使用以下函数检索游标getWordMatches
:
public Cursor getWordMatches(String query, String[] columns) {
String selection = COL_WORD + " MATCH ?";
String[] selectionArgs = new String[] {query+"*"};
return query(selection, selectionArgs, columns);
}
private Cursor query(String selection, String[] selectionArgs, String[] columns) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(FTS_VIRTUAL_TABLE);
Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
columns, selection, selectionArgs, null, null, null);
if (cursor == null) {
return null;
} else if (!cursor.moveToFirst()) {
cursor.close();
return null;
}
return cursor;
}
所有这些都来自 Android 文档,请参见上面的链接。