В PostgreSQL B-tree подходит для равенства, диапазонов и сортировки, а GIN — для поиска элементов составного значения, в том числе лексем tsvector. Для полнотекстового поиска обычно выбирают GIN.
Какими типами индексов ты пользовался в PostgreSQL? Почему для полнотекстового поиска используется GIN-индекс, а не B-tree?
В PostgreSQL B-tree подходит для равенства, диапазонов и сортировки, а GIN — для поиска элементов составного значения, в том числе лексем tsvector. Для полнотекстового поиска обычно выбирают GIN.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В PostgreSQL B-tree подходит для равенства, диапазонов и сортировки, а GIN — для поиска элементов составного значения, в том числе лексем tsvector. Для полнотекстового поиска обычно выбирают GIN.
GIN хранит соответствие лексем документам, поэтому позволяет находить строки по отдельным словам запроса. B-tree упорядочивает значение целиком и не обеспечивает такой поиск по содержимому tsvector.
Другие семейства индексов: Hash для равенства, GiST/SP-GiST для специализированных типов и структур, BRIN для крупных физически коррелированных данных. Выбор проверяют через EXPLAIN и реальную нагрузку: каждый индекс требует места и удорожает записи. На вопрос о личном опыте перечисляйте только действительно использованные типы.
Источник: www.postgresql.org.