Какой тип индекса выбрать для поля в POSTGRES?

При создании базы данных в Postgres над полем с номерами телефонов (в поле нет плюсов и скобок, но тип данных было решено использовать тестовое (text)) был создан индекс btree. Но в ходе использования было решено создать индексирование для полнотекстового поиска. Btree нормально справляется с использованием поискового оператора like вот в таком случае: '792886273%', но в случае когда мы вначале текса используем символ %, поиск работает очень долго ('%8627315'). Вопрос: какой тип индекса посоветуете использовать в таком случае? Спасибо


Ответы (1 шт):

Автор решения: Мелкий

Так для полнотекстового поиска или для like '%foo'? Что есть разные вещи.

btree, конечно, никак не годится для like '%foo'. Невозможно эффективно пройти по дереву, если мы не знаем, куда свернуть на первой же развилке.

like '%foo' или like '%foo%' могут быть ускорены с помощью триграммного поиска, реализованного расширением pg_trgm с GIN либо GIST индексом

create extension pg_trgm;
CREATE INDEX trgm_idx ON test_trgm USING GIST (t gist_trgm_ops);
CREATE INDEX trgm_idx ON test_trgm USING GIN (t gin_trgm_ops);
→ Ссылка