2
Trigram搜索随着搜索字符串变长而变慢
在Postgres 9.1数据库中,我有一个table1约150万行和一列的表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 …