2
検索文字列が長くなると、トライグラム検索が非常に遅くなります
Postgres 9.1データベースには、table1約150万行と1列のテーブルがありますlabel(この質問のために簡略化された名前)。 機能的なtrigram-indexがありますlower(unaccent(label))(インデックスでunaccent()使用できるように不変にされています)。 次のクエリは非常に高速です。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms ただし、次のクエリは遅くなります。 SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms また、検索がより厳密であっても、単語の追加はさらに遅くなります。 私は最初の単語のサブクエリを実行し、次に完全な検索文字列でクエリを実行する簡単なトリックを試しましたが、クエリプランナは(悲しいことに)私の陰謀を見ました: EXPLAIN ANALYZE SELECT * FROM ( SELECT id, …