PostgreSQL에서 NULL 값을 허용하는 열의 스토리지 요구 사항은 값을 적용하는 열의 스토리지 요구 사항과 다릅니다. 다음 테이블 열 정의를 고려하십시오.
"MyColumn" smallint NULL
0, 1 또는 기타 값과 같은 정수를 저장하려면 2바이트가 필요합니다. 그러나 "MyColumn"이 NULL로 설정되면 얼마나 많은 디스크 공간이 소비됩니까? 0바이트를 차지합니까?
비트맵 vs. NULL 저장소
초기 0바이트 소비 가정과 달리 NULL 값은 공간을 차지하지 않습니다. 대신 PostgreSQL은 비트맵을 사용하여 테이블의 각 열에 대한 NULL 상태를 추적합니다. 비트맵의 각 비트는 특정 행에 대한 NULL/NOT NULL 상태를 나타냅니다.
그러나 비트맵이 모든 행에 할당되는 것은 아닙니다. 대신 데이터 정렬을 고려해야 합니다. 각 행에 대한 정보를 포함하는 HeapTupleHeader는 23바이트를 차지합니다. 데이터는 MAXALIGN의 배수(일반적으로 8바이트)에서 시작하도록 정렬되어 null 비트맵에 1바이트의 패딩을 남겨 둡니다.
디스크 공간 요구 사항
다음의 결과 이러한 요인으로 인해 최대 8개 열이 있는 테이블에서는 null 저장소가 사실상 무료입니다. 그러나 더 많은 열이 있는 테이블의 경우 다음과 같이 추가 디스크 공간이 필요합니다.
실제 테스트
광범위한 테스트를 통해 이러한 관찰 결과가 확인되었습니다. 자세한 내용은 다음 토론을 참조하세요.
위 내용은 PostgreSQL에서 NULL 값이 실제로 소비하는 디스크 공간은 얼마나 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!