> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 NULL 값이 실제로 소비하는 디스크 공간은 얼마나 됩니까?

PostgreSQL에서 NULL 값이 실제로 소비하는 디스크 공간은 얼마나 됩니까?

Susan Sarandon
풀어 주다: 2024-12-26 03:26:10
원래의
812명이 탐색했습니다.

How Much Disk Space Do NULL Values in PostgreSQL Really Consume?

NULL 값이 PostgreSQL 디스크 공간 소비에 미치는 영향

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 저장소가 사실상 무료입니다. 그러나 더 많은 열이 있는 테이블의 경우 다음과 같이 추가 디스크 공간이 필요합니다.

  • 추가 MAXALIGN 바이트(일반적으로 8)는 64개 열의 다음 그룹에 할당됩니다.
  • 공간은 행에 하나 이상의 실제 NULL 값이 있는 경우에만 할당됩니다.
  • 시스템 카탈로그에서 삭제된 열은 여전히 ​​비트를 차지합니다.

실제 테스트

광범위한 테스트를 통해 이러한 관찰 결과가 확인되었습니다. 자세한 내용은 다음 토론을 참조하세요.

  • https://dba.stackexchange.com/questions/4452/does-not-using-null-in-postgresql-still-use-a -헤더 내 널 비트맵

위 내용은 PostgreSQL에서 NULL 값이 실제로 소비하는 디스크 공간은 얼마나 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿