B-Tree подходит для равенства, диапазонов и сортировки; GIN — для поиска компонентов сложного значения; GiST — расширяемая структура для пространственных и других специализированных операторов.
Объясните разницу между индексами B-Tree, GIN и GiST в PostgreSQL. Для каких типов данных и поисковых запросов (LIKE, полнотекстовый поиск, геокоординаты) эффективен каждый из них?
B-Tree подходит для равенства, диапазонов и сортировки; GIN — для поиска компонентов сложного значения; GiST — расширяемая структура для пространственных и других специализированных операторов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
B-Tree подходит для равенства, диапазонов и сортировки; GIN — для поиска компонентов сложного значения; GiST — расширяемая структура для пространственных и других специализированных операторов.
Для полнотекстового поиска по tsvector обычно выбирают GIN. Для геоданных часто используют GiST с подходящим классом операторов, например расширения PostGIS. Обычный B-Tree может помогать префиксному LIKE при подходящих collation/operator class, но не произвольному %фрагмент%. Для подстрок и похожести есть pg_trgm с GIN/GiST. Тип индекса выбирают вместе с оператором запроса и данными, а не только по названию колонки.
Источник: www.postgresql.org, www.postgresql.org.