3

postgresにcharacter varying、1 つの空白で区切られた一連の文字列を含むフィールドがあります。例えば:

  • --> one two three <--
  • --> apples bananas pears <--

-->文字列の開始位置と終了位置を示すためにandを配置し<--ました (これらは格納された文字列自体の一部ではありません)。

このフィールドにクエリを実行して、文字列全体に特定の単語 (リンゴなど) が含まれているかどうかを確認する必要があります。可能なクエリは

SELECT * FROM table WHERE thefield LIKE '%apple%'

しかし、私の場合、検索された文字列はフィールドのどこにでも配置できますが、パターンが文字列の先頭にアタッチされている場合にのみ b ツリー インデックスがスケーリングされるため、それは最悪でスケーリングしません。

問題にどのようにアプローチすることをお勧めしますか?

4

1 に答える 1

5

最初にデータベースの正規化を検討してください。

現在の設計で作業している間、トライグラム インデックスを使用してクエリをサポートします。これは非常に高速です。

この密接に関連する回答の詳細とリンク:
PostgreSQL LIKE クエリのパフォーマンスのバリエーション

dba.SE に関するこの関連する回答のパターン マッチングとインデックスについてさらに詳しく:
PostgreSQL での LIKE、SIMILAR TO または正規表現によるパターン マッチング

于 2014-03-24T16:43:41.990 に答える