Storage メモ(その2)

Enjoy*Study - Storage メモ の続き。
SQLiteでテキストの部分一致検索を行うにあたって、どうするのが一番良いか試行錯誤中…

  • LIKE '%文字%'みたいな感じでも、大量のレコードじゃなきゃそれなりのパフォーマンスが出る。(50文字くらいのテキストで1万レコードくらいなら余裕)
  • SQLite全文検索の機能が無いのか?
    • Ver3.3.8からFTS1やらFTS2とかいうので全文検索が、、けどFirefoxに入ってるのは3.3.5。しかもそれはどうも区切り文字での形態素なので、日本語じゃ話しにならないっぽい。
  • N-gram(とりあえず20)で、インデックス作ってみた。けど、それだとINSERTだけでとてつもない時間がかかる。(元は50文字×1万レコードをN-gram用のINDEXを作ると10分とか…)
    • しかも最初はautocommitにしていて、とてつもなく遅くて泣けた。大量のレコードを処理する際にはトランザクションでまとめないとダメ。
    • 作ったN-gram用のテーブルを使って検索しても、遅かった。しかもLIKE '%文字%'みたいなときよりも遅いような…。うまくINDEX使えていない??
      • EXPLAINじゃ、INDEX使えているのか確認できない!! idxchkってので確認できるっぽいけど、Windows版がみあたらない??
  • TEXTに対してINDEXを張ると、ページリロード後に「no such collation sequence」っていうエラーが出た。brazilさんとこでVACUUMすると防げると書いてあったので、とりあえず、windowのunloadイベントでVACUUMにしておいた。けど、テーブルのレコードが大きければVACUUMにかかるコストも馬鹿にならないので、なんか他の方法が無いかも探さねば…