postgres像单个单词列的查询性能

问题描述 投票:0回答:2

数据库类型:PostgreSQL数据库版本:11我们有一列,总是有一个单词作为值。最大长度为10个字符。

我们对于表中的此列始终具有唯一的值。

我们对此栏没有任何更新,只有新行与该栏一起插入。

我们希望对此列启用like查询。

我们应该考虑PostgreSQL TRGM extension并使用GIN索引吗?还是在这种情况下正常索引就足够了?

查询将是这样:

select * from my_table where my_column like '%abc%';

这个问题来自这样的事实,当长文本包含多个单词时,需要全文搜索时,TRGM非常强大,但是对于单个单词的情况,想知道它是否比普通索引更好。

sql postgresql performance indexing sql-like
2个回答
1
投票

“常规”索引(b树)通常可以解析:

where x like 'abcdefghij'
where x = 'abcdefghij'

也可用于前缀匹配:

where x like 'abcd%'

但是,当模式以通配符开头时,不能使用它:

where x like '%hij'

因此,是否使用索引取决于您将如何使用它。

我应该补充一点,无论索引如何,都需要考虑大小写无关或混合排序规则。


0
投票

trigram索引是唯一可以帮助使用前导通配符进行LIKE查询的索引。对于像您显示的那样的短搜索字符串,如果三字组合出现在许多单词中,它可能仍然很慢。但这是您所能得到的最好的。

© www.soinside.com 2019 - 2024. All rights reserved.