Ларами е прав за растерното изображение и прави връзки към правилното място в ръководството. И все пак, това е почти, но не съвсем правилно:
Така че за всеки даден ред с една или повече нули, размерът, добавен към него, ще бъде този на растерната карта (N бита за таблица с N колони, закръглено нагоре).
Човек трябва да вземе предвид подравняването на данните. HeapTupleHeader
(на ред) е с дължина 23 байта, действителните данни в колоната винаги започват с кратно на MAXALIGN
(обикновено 8 байта). Това оставя един байт запълване, което може да се използва от нулевото растерно изображение. Всъщност съхранението NULL е абсолютно безплатно за таблици до 8 колони .
След това друг MAXALIGN
(обикновено 8) байта се разпределят за следващия MAXALIGN * 8
(обикновено 64) колони. И т.н. Винаги за общия брой потребителски колони (всичко или нищо ). Но само ако има поне една действителна стойност NULL в реда.
Проведох обширни тестове, за да потвърдя всичко това. Повече подробности:
- Не използва ли NULL в PostgreSQL все още ли използва NULL растерна карта в заглавката?