数据库类型:PostgreSQL数据库版本:11我们有一列,总是有一个单词作为值。最大长度为10个字符。
我们对于表中的此列始终具有唯一的值。
我们对此栏没有任何更新,只有新行与该栏一起插入。
我们希望对此列启用like
查询。
我们应该考虑PostgreSQL TRGM extension并使用GIN索引吗?还是在这种情况下正常索引就足够了?
查询将是这样:
select * from my_table where my_column like '%abc%';
这个问题来自这样的事实,当长文本包含多个单词时,需要全文搜索时,TRGM非常强大,但是对于单个单词的情况,想知道它是否比普通索引更好。
“常规”索引(b树)通常可以解析:
where x like 'abcdefghij'
where x = 'abcdefghij'
也可用于前缀匹配:
where x like 'abcd%'
但是,当模式以通配符开头时,不能使用它:
where x like '%hij'
因此,是否使用索引取决于您将如何使用它。
我应该补充一点,无论索引如何,都需要考虑大小写无关或混合排序规则。
trigram索引是唯一可以帮助使用前导通配符进行LIKE
查询的索引。对于像您显示的那样的短搜索字符串,如果三字组合出现在许多单词中,它可能仍然很慢。但这是您所能得到的最好的。