Перейти к содержимому
13 / 15

JSONB против отдельных колонок: где граница разумного?

JSONB уместен там, где структура действительно переменная: настройки пользователя, произвольный payload события, ответ внешнего API, который нужно сохранить целиком. Колонки уместны там, где поле участвует в фильтрах, соединениях, сортировке или должно проверяться ограничениями — то есть почти всегда для бизнес-полей. Практические различия: колонка занимает меньше места и не хранит ключ в каждой строке; статистика по колонке точная, а по выражению из JSONB планировщик оценивает хуже, что портит планы; на JSONB можно построить GIN-индекс для @> и индекс по выражению для конкретного ключа, но составные условия по нескольким ключам работают хуже, чем составной B-tree. Большие значения уезжают в TOAST и сжимаются, поэтому чтение одного ключа из мегабайтного документа читает весь документ. Практическое правило: фильтруете по полю — сделайте колонку, храните остальное в JSONB.

JSONB против отдельных колонок: где граница разумного? | JScriptiser