首页 > 解决方案 > Postgresql 文本搜索性能

问题描述

我一直在研究具有以下格式的 varchar 字段(或多或少在 10 到 400 个字符之间)的文本搜索(没有 tsvector):

字段,字段_a,字段_b,字段_c,...,字段_n

我计划运行的查询可能类似于:

select * from information_table where fields like '%field_x%'

由于fields中没有空格,我想知道如果我在 500k+ 行中运行搜索是否存在一些性能问题。对此有何见解?有关 varchar 性能和可能 varchar 索引的任何文档?

我不确定 tsvector 是否可以在没有空格的完整字符串上工作。您如何看待这个解决方案?您是否看到其他有助于提高性能的解决方案?

谢谢,我期待收到您的来信。R

标签: postgresqltsvector

解决方案


一般来说,文本搜索解析器会将逗号和空格视为相同,因此如果您想使用 FTS,带有逗号的结构不会造成问题。pg_trgm 也同样对待逗号和空格,所以如果你想使用那个方法,它也不会因为逗号而有问题。

性能将取决于查询中的标记在文本正文中的流行程度或稀有程度。很难根据一个示例行和一个示例查询来概括这一点,这两者看起来都不是很现实。EXPLAIN (ANALYZE, BUFFERS)解决这个问题的最佳方法是在启用和启用 track_io_timing 的情况下使用真实(或至少是真实的)数据运行一些真实的查询。


推荐阅读