0

iPhoneアプリでsqliteを使用しています。検索ボックスでは、データベースにクエリを実行し、ユーザーが入力した内容に関連付けられている値を返したいと考えています。現在、次のようないくつかの異なる列を検索しています。

Gene
Disease
Medicine
Keywords

検索テキストが変更されたときに、このメソッドを (いくつかの疑似コードを使用して) 呼び出すブルート フォース メソッドから始めました。

// Basically we do this for our 4 columns we are searching on
    NSString *query2 = [NSString stringWithFormat:@"select * from MedicineList where MedicineList.Keywords like \"%%%@%%\"",searchtext];

    FMResultSet * rs2 = [ _patientAnnotatedDatabase executeQuery:query2];
    while ([rs2 next])
    {
        // if you find anything, put it in a dictionary
    }
    [rs2 close];

これは、列を検索して結果の辞書を返す 1 つの大きなメソッドです。データセットが小さかったときに機能します。もちろん、データセットが大きくなったので、パフォーマンスはそれほど高くありません。検索対象の列にインデックスを作成する以外に、他にできるパフォーマンス上のことはありますか? 前もって感謝します。

4

1 に答える 1

1

LIKEのようなパターン%word%は、通常のインデックスでは最適化できません。

単語の検索は、SQLite の全文検索拡張機能が設計されている目的です。

于 2013-02-07T16:58:59.253 に答える