postgresql - Postgresql 文本搜索性能
问题描述
我一直在研究具有以下格式的 varchar 字段(或多或少在 10 到 400 个字符之间)的文本搜索(没有 tsvector):
字段,字段_a,字段_b,字段_c,...,字段_n
我计划运行的查询可能类似于:
select * from information_table where fields like '%field_x%'
由于fields中没有空格,我想知道如果我在 500k+ 行中运行搜索是否存在一些性能问题。对此有何见解?有关 varchar 性能和可能 varchar 索引的任何文档?
我不确定 tsvector 是否可以在没有空格的完整字符串上工作。您如何看待这个解决方案?您是否看到其他有助于提高性能的解决方案?
谢谢,我期待收到您的来信。R
解决方案
一般来说,文本搜索解析器会将逗号和空格视为相同,因此如果您想使用 FTS,带有逗号的结构不会造成问题。pg_trgm 也同样对待逗号和空格,所以如果你想使用那个方法,它也不会因为逗号而有问题。
性能将取决于查询中的标记在文本正文中的流行程度或稀有程度。很难根据一个示例行和一个示例查询来概括这一点,这两者看起来都不是很现实。EXPLAIN (ANALYZE, BUFFERS)
解决这个问题的最佳方法是在启用和启用 track_io_timing 的情况下使用真实(或至少是真实的)数据运行一些真实的查询。
推荐阅读
- javascript - 将安全标志添加到网站 cookie 有什么缺点吗?
- html - 如何根据包含的时间属性将子标题添加到 div?
- node-red - 代码:16 消息:'mqtt:服务器:授权令牌已过期。'
- python-3.x - 通过 Django M2M 字段查询
- typescript - 如何使用接口在打字稿中编写此函数?
- c++ - 将 libprotobuf.a 库的路径从 /lib64/ 更改为 /usr/local/lib
- sql-server - 如何重命名 RDS SQL Server Web 版的数据库名称(不是 RDS 实例名称,而是 RDS 实例内的数据库之一)?
- typescript - 如何将额外的属性传递给 Golang 中的结构?就像你在打字稿中一样
- java - 如何使用 graphql-kickstart-spring-boot-starter-webflux 注册 DataLoaders?
- postgresql - 在运行具有多个连接的查询时使用表中的特定索引