Ответ
Вопреки распространенному мнению, для сценария с большим количеством вставок (INSERT) тип JSON
технически будет быстрее на запись.
Однако, рекомендуемым и более практичным выбором в большинстве случаев все равно остается JSONB
.
Ключевое различие
Характеристика | JSON | JSONB |
---|---|---|
Скорость вставки | Высокая. Хранит точную текстовую копию. Нет затрат на парсинг при записи. | Ниже, чем у JSON . Текст парсится, валидируется и преобразуется в оптимизированный бинарный формат. |
Скорость чтения | Низкая. Требует парсинга при каждом чтении или обращении к полям. | Высокая. Данные уже в бинарном виде, готовы к обработке и запросам. |
Хранение | Сохраняет все пробелы, порядок ключей и дубликаты ключей. | Не сохраняет лишние пробелы и порядок ключей. Удаляет дубликаты (оставляет последний). |
Индексация | Не поддерживается. | Поддерживается (GIN), что кардинально ускоряет запросы к полям. |
Вывод и рекомендация
Используйте JSON
, только если ваша задача — это "записать и забыть", и вы уверены, что никогда не будете запрашивать или индексировать поля внутри JSON. Это крайне редкий случай.
Во всех остальных случаях выбирайте JSONB
. Небольшое замедление при вставке многократно окупается эффективностью хранения, скоростью чтения и возможностями индексации, даже если SELECT-запросы редки.
-- Рекомендуемый вариант
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
data JSONB
);