当我在PostgreSQL中相对较小的一组记录(8k)上执行模糊文本搜索时,看到的查询很慢(约20秒)。我已经设置了GIN和GIST Trigram索引,并通过ANALYZE确认正在使用它们。表现似乎是由少数具有非常长的文本字段的记录驱动的。虽然大多数记录的字符数都不超过2k,但大约有200个字符数超过10k,少数字符数超过20k。将这些长字符串截断为10k个字符可将查询时间缩短为8s。
我尝试了PostgreSQL 10和11,GIN和GIST索引,但性能没有实质性的改变。
我尝试将文本内容分成大量的记录,每个记录要小得多。搜索分布在更多记录中的相同文本会导致亚秒级查询。
查询完全没有异常:
select title,
'orthopedic surgeon' <<-> content as sml
from answers
where 'orthopedic surgeon' <% content
order by sml desc
有了这么少的记录,即使我的文本字段具有30k +个字符,我也希望Trigram索引能够提供近乎即时的结果。我不希望通过将内容分散到更多记录中来提高查询速度。这种表现正常吗?