0
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) からのデータ取得を高速化するには?

4

3 に答える 3

1

理論的には、クエリ プランナーはインデックスを自動的に使用する必要があります。

ほとんどの場合、SQLite のクエリ プランナーは、外部の助けがなくても、単独で適切に機能します。ただし、クエリ プランナーは操作するためのインデックスを必要とし、通常、クエリ プランナーがタスクを完了するのに十分なインデックスをスキーマに追加するのはプログラマの責任です。


また、クエリ オプティマイザーの概要の記事に興味があるかもしれません。クエリの実行方法に説明されている追加の詳細がいくつかあります。

于 2013-08-17T15:41:34.583 に答える
0

プレフィックス ルックアップでインデックスLIKEを使用できるようにするには、

  1. 列にはTEXT アフィニティTEXTが必要です。つまり、 orVARCHARまたはそのようなものとして宣言されている必要があります。と
  2. インデックスは大文字と小文字を区別しない必要があります。

    CREATE INDEX ele_value_idx ON search_eng(r_ele_value COLLATE NOCASE)
    
于 2013-08-17T17:23:50.207 に答える
0

大規模なデータベースでの検索については、実際に 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 のドキュメントからのものです。上記のリンクを参照してください。

于 2013-08-17T16:43:14.033 に答える