В дополнение к тому, что написал Джастин Кейв, начиная с PostgreSQL 9.1, вы можете ускорить любой поиск с помощью LIKE
( ~~
) или ILIKE
( ~~*
), а также базовых совпадений с регулярными выражениями ( ~
). Используйте классы операторов, предоставляемые модулем pg_trgm с индексом GIN или GiST, чтобы ускорить LIKE
выражения, которые не привязаны слева. Чтобы установить расширение, запустите один раз для каждой базы данных:
CREATE EXTENSION pg_trgm;
Создайте индекс формы
CREATE INDEX tbl_col_gin_trgm_idx ON tbl USING gin (col gin_trgm_ops);
Или:
CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);
Создание и ведение индекса GIN или GiST сопряжено с определенными затратами, но если ваша таблица написана не сильно, это отличная возможность для вас.
Депес написал отличную статью в своем блоге о новой функции.
Джин или ГИСТ?
Эти две цитаты из руководства должны служить руководством
Выбор между индексами GiST и GIN зависит от относительных характеристик производительности GiST и GIN, которые обсуждаются в другом месте. Как правило, поиск по индексу GIN выполняется быстрее, чем по индексу GiST, но его создание или обновление происходит медленнее; поэтому GIN лучше подходит для статических данных, а GiST для часто обновляемых данных.
Но для запросов типа «ближайший сосед» с использованием оператора расстояния <->
:
Это может быть реализовано довольно эффективно с помощью индексов GiST, но не с помощью индексов GIN.