like検索でインデックスが使われる条件など
2007/11/18
今回は早い時期から、1000件程度のチケットを登録して、検索性能が期待した状態になっているかを調べながら進めているのですが、思うようには行ってないので調べ中です。
調べてみると、sqliteのLIKE演算でインデックスを使う方法 に情報があった。「LIKE ‘/foo/bar/%’のように%が最後 」の LIKE 演算には、デフォルトではインデックスは使われないらしい。コンパイル時に -DSQLITE_CASE_SENSITIVE_LIKE を指定すればいいらしいけど、実行時に指定する方法は無いのかな。 The SQLite Query Optimizer Overviewを見ると、 PRAGMA case_sensitive_like=ON; とすればいいらしいけど、どこでやればいいか分からない(普通に実行しても結果は変わらなかった)。
SQLite3 のインデックスと検索速度
Starbug1では、「field1 like ‘%string%’」のような検索が中心なんです。。。
ファイルが実際に必要になるまでデータベース・ファイルの open/create は遅延されます。これは、ネイティブテキスト表現やデフォルトのページサイズのようなオプションおよびパラメーターを、PRAGMAステートメントを使って設定することを可能にします。
C/C++ Interface For SQLite Version 3
とりあえず、sqlite3_open した直後に、pragmaステートメントを発行してみましたが、効果は出ず。
その前に、4.0 The LIKE optimization を読め > 自分
今日は時間切れなので、続きは後日。