GIN — Stronger than ever in 9.4 and further
4 июля
Александр Коротков
Доклад посвящен улучшениям в GIN-индексах в PostgreSQL 9.4 и далее, которые
выводят GIN на новый уровень производительности и расширяемости. Наиболее важные улучшения:
-
Сжатие постинг-листов. Индексы становятся в среднем в 2 раза компактнее.
При это не требуется никаких изменений со стороны opclass'ов.
pg_upgrade поддерживается, индексы сжимаются "на лету".
-
Алгоритм быстрого сканирования GIN-индексов позволяет пропускать части
больших постинг-деревьев при сканировании. Этот алгоритм кардинально
улучшает скорость поиска для hstore и jsonb операторов, а также случай
"частое_слово & редкое_слово" для полнотекстового поиска.
-
Хранение дополнительной информации в постинг-листах. Содержимое
этой дополнительной информации зависит от конкретной разновидности
GIN-индекса (определяется opclass'ом). Дополнительная информация может
быть полезна при самых разных видах поиска: поиск по фразам, поиск по
похожести массивов, обратный полнотекстовый поиск (поиск тех tsquery,
которые подходят под tsvector), обратный поиск по регулярным выражением
(поиск регулярных выражений, подходящих под строку), поиск по строковой
"похожести" с использованием позиционных n-грам.
-
Ранжирование по индексу. Это улучшение позволяет возвращать
результаты из индекса таким образом, как это определяет opclass.
Наиболее важное применение — возвращение результатов полнотекстового
поиска в порядке релевантности, кардинально снижающее загрузку IO. Но
есть также и другие применения, такие как возврат массивов или строк
в порядке их "похожести".
В докладе представлены результаты "бенчмарков" полнотектового поиска,
использующие реальные наборы данных (6М и 15М документов) и реальные поисковые запросы,
которые демонстрируют, что улучшенный полнотекстовый поиск PostgreSQL
(со всеми накладными расходами ACID) может превосходить по скорости Sphinx.
Презентация