Postgresql BTREE_GIN индекс с опцией gin_trgm_ops?
На https://www.postgresql.org/docs/current/static/pgtrgm.html объясняется, как можно использовать специальные иды GIN с опцией gin_trgm_ops для повышения производительности оператора подобия триграмм.
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, можно ли использовать индекс GIN pg_trgm (с опцией gin_trgm_ops) вместо индекса BTREE? Объединяет ли он свойства как BTREE_GIN, так и индекса триграмм GIN, или дополнительный индекс BTREE все еще необходим для объединений и выражений равенства и т. Д.?
1 ответ
Нет, если вы установите btree_gin
Вы можете создать индекс GIN для "базовых" типов данных, таких как integer
, varchar
или же text
,
Обычно это бесполезно, так как вы можете использовать такой индекс ни для чего, что не было бы лучше с помощью обычного индекса B-дерева, но это очень полезно, если вы хотите создать многоколонный индекс GIN, включающий столбец с такими данными например, если вы хотите создать комбинированный индекс для выражения типа tscol @@ to_tsquery('big data') AND intcol = 42
,