在https://www.postgresql.org/docs/current/static/pgtrgm.html上解释了如何使用带有gin_trgm_ops选项的特殊GIN索引来促进三元组相似操作符的性能。
CREATE INDEX trgm_idx ON test_trgm USING GIN (t gin_trgm_ops);
也可以说:
这些索引不支持相等运算符,也不支持简单的比较运算符。所以你可能也需要一个常规的b树索引。
然而,还有BTREE_GIN扩展,它应该允许使用GIN索引代替BTREE索引。https://www.postgresql.org/docs/current/static/btree-gin.html
我的问题是:如果我安装BTREE_GIN扩展,可以pg_trgm GIN索引(与gin_trgm_ops选项)被用作BTREE索引的替代品?它是否结合了BTREE_GIN和三元组GIN索引的属性,还是仍然需要额外的BTREE索引来连接和相等表达式等?
不,如果你安装了btree_gin
,你可以在“basic”数据类型如integer
, varchar
或text
。
这通常是无用的,因为您可以使用这样的索引来完成常规b树索引无法完成的任何事情,但是如果您想要创建包含具有这种数据类型的列的多列GIN索引,例如,如果您想要为像tscol @@ to_tsquery('big data') AND intcol = 42
这样的表达式创建组合索引,则它非常有用。