GIN для jsonb: jsonb_ops или jsonb_path_ops
Вопрос
Запросы к attrs jsonb только вида attrs @> '{"color": "red"}'. Чем индекс USING gin (attrs jsonb_path_ops) отличается от GIN по умолчанию?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
jsonb_path_opsподдерживает больше операторов, включая проверку ключа?- Он меньше и быстрее для
@>, но не обслуживает?(есть ли ключ)правильный ответ - Это B-tree индекс по всему JSON целиком, отсортированному по ключам
- Разницы нет: это синоним
jsonb_ops, оставленный для совместимости
Разбор
Класс по умолчанию jsonb_ops индексирует каждый ключ и каждое значение отдельно и поддерживает операторы существования ключа ?, ?|, ?& вместе с @>. jsonb_path_ops индексирует хеши путей до значений: индекс компактнее и точнее для проверки вхождения @> (и JSONPath @?, @@), но вопрос «есть ли ключ» ему не по силам. Если нужно часто фильтровать по одному известному полю, бывает лучше обычный B-tree по выражению ((attrs->>'color')).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Запретить пересекающиеся бронирования в базе
Следующий вопрос
Как выбрать тип индекса в PostgreSQL