На додаток до того, що написав Джастін Кейв, оскільки після 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 несе в собі витрати, але якщо ваша таблиця не надто написана, це чудова функція для вас.
Депес написав чудову статтю у своєму блозі про нову функцію.
GIN або GiST?
Ці два цитати з посібника повинні дати певні вказівки
Вибір між індексацією GiST та GIN залежить від відносних характеристик продуктивності GiST та GIN, які обговорюються в інших місцях. Як правило, індекс GIN швидше шукати, ніж індекс GiST, але повільніше будувати або оновлювати; тому GIN краще підходить для статичних даних, а GiST - для часто оновлюваних даних.
Але для "найближчого сусіда" тип запитів із використанням оператора дистанції <->
:
Це може бути досить ефективно реалізовано індексами GiST, але не індексами GIN.