복붙노트

[SQL] 얼마나 많은 디스크 공간은 PostgreSQL의 DB를 사용하여 NULL 값을 저장하는 데 필요한?

SQL

얼마나 많은 디스크 공간은 PostgreSQL의 DB를 사용하여 NULL 값을 저장하는 데 필요한?

하자 내가 내 테이블에 열이 다음과 같은 정의가 있다고 가정 :

"MyColumn" smallint NULL

0, 1 또는 뭔가 다른 같은 값을 저장하면 2 바이트 (1)가 필요합니다. 내가 NULL에 "MyColumn"로 설정한다면 얼마나 많은 공간은 필요합니까? 그것은 0 바이트를해야합니까?

모든 열 / 행에 대한 관리 목적이나 그러한 것들에 대한 몇 가지 추가 필요 바이트가 있습니까?

(1) http://www.postgresql.org/docs/9.0/interactive/datatype-numeric.html

해결법

  1. ==============================

    1.널 열은 저장되지 않습니다. 행은 시작시 맵 및 널 또는 비 - 널되는 것들을 나타내는 컬럼 당 하나 개의 비트를 갖는다. 모든 열은 행에 비 - 널 인 경우 비트 맵을 생략 할 수있다. 따라서, 하나 이상의 널 (null)과 특정 행에 대해, 그 첨가 사이즈가 비트 맵의 ​​것 (AN N 열 테이블의 N 비트를 반올림).

    널 열은 저장되지 않습니다. 행은 시작시 맵 및 널 또는 비 - 널되는 것들을 나타내는 컬럼 당 하나 개의 비트를 갖는다. 모든 열은 행에 비 - 널 인 경우 비트 맵을 생략 할 수있다. 따라서, 하나 이상의 널 (null)과 특정 행에 대해, 그 첨가 사이즈가 비트 맵의 ​​것 (AN N 열 테이블의 N 비트를 반올림).

    깊이 토론에 더 여기에 문서에서

  2. ==============================

    2.라라는 비트 맵에 대한 권리 및 그 설명서에있는 바로 이곳에 연결합니다. 그러나이 거의이지만, 아주 정확하지 :

    라라는 비트 맵에 대한 권리 및 그 설명서에있는 바로 이곳에 연결합니다. 그러나이 거의이지만, 아주 정확하지 :

    하나는 데이터 정렬 요인이있다. (행당)를 HeapTupleHeader 긴 23 바이트가, 실제 열 데이터가 항상 MAXALIGN (일반적으로 8 바이트)의 배수에서 시작한다. 널 비트 맵에 의해 이용 될 수있는 패딩의 잎 한 바이트. 실제로 NULL 저장 8 열까지 테이블에 대한 무료입니다.

    그 후, 다른 MAXALIGN (일반적 8) 바이트는 다음 MAXALIGN * 8 (일반적으로 64) 열에 할당된다. 사용자 컬럼의 총 수에 대한 등 항상 (모 아니면도). 그러나 경우에만 행에 적어도 하나 개의 실제 NULL 값이 있습니다.

    나는이 모든 것을 확인하기 위해 광범위한 테스트를 실행했습니다. 자세한 내용은:

  3. ==============================

    3.그것은에있는 데이터의 합보다 더 많은 공간이 필요합니다 (행을 추가처럼) 뭔가를 변경 될 수 있습니다이 하나 개의 값을 추가, 그러나 그것은 공간의 대부분을 구성하는 테이블의 구조의 1 바이트 (× 00)가 필요합니다.

    그것은에있는 데이터의 합보다 더 많은 공간이 필요합니다 (행을 추가처럼) 뭔가를 변경 될 수 있습니다이 하나 개의 값을 추가, 그러나 그것은 공간의 대부분을 구성하는 테이블의 구조의 1 바이트 (× 00)가 필요합니다.

    편집 : 라라는 나보다 널 (null)에 대해 더 모르는 것 같다 :)

  4. from https://stackoverflow.com/questions/4229805/how-much-disk-space-is-needed-to-store-a-null-value-using-postgresql-db by cc-by-sa and MIT license