- 関心のある 4 つのテキスト列があります。
- 各列は約 100 文字までです。
- 3 つの列のテキストは、ほとんどがラテン語です。(データは生物のカタログであり、これらは物の名前です。)
- 現在、データは約 500 行です。これが1000を超えるとは思えません。
- 少数のユーザー (10 人未満) には、データを追加、更新、および削除するための編集権限があります。これらのユーザーがデータベースに大きな負荷をかけるとは思いません。
したがって、これはすべて、考慮すべき非常に小さなデータセットを示唆しています。
少なくとも 1 列に検索テキストが含まれる行の 4 列すべてで検索を実行する必要があります (大文字と小文字は区別されません)。クエリは、Web アプリケーションを介して発行されます (および結果が提供されます)。私はそれにアプローチする方法について少し迷っています。
PostgreSQL には、テキスト検索速度を向上させるためのオプションがいくつか用意されています。私が検討してきた PostgreSQL に組み込まれている可能なオプションは次のとおりです。
- これをまったく索引付けしようとしないでください。
ILIKE
、LIKE
onなどを使用しlower
てください。(インデックスなし?) - 検索速度を向上させるために pg_trgm でインデックスを作成します。何らかの形で連結にインデックスを付ける必要があると思います。
- 全文検索。これには、インデックスの連結も含まれると思います。
残念ながら、私はこれらのいずれかの期待されるパフォーマンスや利点とトレードオフについてあまり詳しくないので、最初に何を試すべきで、何を考慮すべきでないかを知ることは困難です. 私が読んだいくつかのことは、2 と 3 のインデックス付けを行うのがかなり遅いことを示唆しています。また、言語が混在しているため、全文検索は魅力的ではないように見えます。複数の言語を同時に処理できない限り、言語ベースのように見えるからです。この小さなデータの場合、単純なILIKE
またはおそらくLIKE
onlower
で十分に高速であると期待できますか? それとも、これほど小さなデータに対する変更の負荷が低いのに、インデックス作成は十分に高速なのでしょうか? データベース以外のものを探した方がよいでしょうか?
確かに、これらすべてを実際にベンチマークして、何が最速かを確認する必要がありますが、残念ながら、このプロジェクトにはあまり時間がありません。では、これらの方法の利点とトレードオフは何ですか? この種の問題を解決するのに適切でないオプションはどれですか? 検討する価値のある他のタイプのソリューション (データベース外の可能性を含む) は何ですか?
(PG でのテキスト検索に関するある種の初心者向けチュートリアルが役立つと思うかもしれませんが、私の検索ではほとんどの場合、全文検索が表示されます。それが私にとって役立つかどうかさえわかりません。)
私は PG 9.2.4 を使用しているため、9.3 より前の機能はオプションです。