GIN полезен для поиска элементов внутри составных значений, а составной индекс — для запросов по нескольким полям. Это не взаимоисключающие категории: GIN тоже может быть многоколоночным.
Когда оправдано использование GIN-индексов или составных индексов?
GIN полезен для поиска элементов внутри составных значений, а составной индекс — для запросов по нескольким полям. Это не взаимоисключающие категории: GIN тоже может быть многоколоночным.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
GIN полезен для поиска элементов внутри составных значений, а составной индекс — для запросов по нескольким полям. Это не взаимоисключающие категории: GIN тоже может быть многоколоночным.
Для JSONB, массивов или полнотекстового поиска смотрят на поддерживаемые GIN operator classes и операторы запроса. Для сочетания фильтра и сортировки часто рассматривают составной B-tree с подходящим порядком колонок. Индекс проектируют под конкретный запрос, селективность и частоту изменений, затем проверяют план. Не нужно индексировать весь JSON-документ, если востребовано только одно извлекаемое поле и достаточно выражения. Учитывайте размер, стоимость записи и альтернативы вроде частичного индекса.