Загадка №2. О пропавшем времени. Почему обновление #JSONB на порядок выше чем int в #PostgreSQL?

Ответ на загадку №1 Загадка №2. Проводим эксперимент и обновление JSONB поля заняло в 300 раз больше времени. Почему? DROP TABLE IF EXISTS t; \timing CREATE TABLE t AS SELECT i AS id, (SELECT jsonb_object_agg(j, j) FROM generate_series(1, 1000) j) js FROM generate_series(1, 1000) i; Посмотрим на размер сгенерированных данных: SELECT oid::regclass AS heap_rel, pg_size_pretty(pg_relation_size(oid)) AS heap_rel_size, reltoastrelid::regclass AS toast_rel, pg_size_pretty(pg_relation_size(reltoastrelid)) AS toast_rel_size FROM pg_class WHERE relname = ’t’; Сама таблица будет занимать 56 Кб, а хранилище TOAST — 8 Мб. Каждый JSONB будет 19 Кб, и он сжимается в 6 Кб -- обновление простого поля займет UPDATE t SET id = id 1; -- обновление JSONB UPDATE t SET js = js::jsonb || ’{“a“:1}’; Подробней узнать и задать вопросы можно у меня в Telegram-канале
Back to Top