복붙노트

[SQL] 데이터베이스에 널 (null)에 의해 사용되는 공간

SQL

데이터베이스에 널 (null)에 의해 사용되는 공간

열이 NULL의 경우, 즉 열이 사용하는 공간에 영향을 미칩니 까? 공간은 열 정의에 의해 고정 사용됩니까? 이 데이터베이스에서 데이터베이스로 변화한다. (나는 주로 SQL 서버 2000에서 interestred입니다)

설명: 문제는 (Kritsen 및 GBN가 지적했듯이 이것은 또 다른 비트 비용) 열이 '널 (NULL)'때 무슨 일을하지 관한 것이다. 문제는 거기 (일부 특정 행에) 열이 널 (null)이 실제로 어떤 절약이다.

...

널 열이 마지막에있는 경우 Quassnoi에 따라 오라클의 절감 효과를 얻을 수있는 반면 Cadaeic는 2008 버전까지 SQL 서버에는 비용 절감을 할 수 없을 것으로 보인다 SQL Server에 대한 해답을 제공했다. 덕분에 답변을, 그들은 모두 도움이되었다.

해결법

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

    1.컬럼에 NULL을 저장하는 것은 특히 비용이나 공간에 저장하지 않습니다. 고정 길이 데이터의 경우, 전체 공간은 여전히 ​​예약되어 있습니다.

    컬럼에 NULL을 저장하는 것은 특히 비용이나 공간에 저장하지 않습니다. 고정 길이 데이터의 경우, 전체 공간은 여전히 ​​예약되어 있습니다.

    한편, 가변 길이 데이터는 데이터의 길이를 필요로 플러스 오버 실제 길이를 저장하기. 예를 들어, VARCHAR (n)은 요구되는 저장 공간은 항상 N + 2이고, 그래서, 실제 길이를 나타내는 데이터의 2 바이트를 사용한다.

    또한,이 NULL 값을 가진 SET ANSI_PADDING ON, 숯불 (N)는 VARCHAR (N)으로 행동 할 경우 언급해야한다.

    2008 명을 소개합니다 주로 NULL입니다 열에 대한 절감 효과를 얻을 수있는 스파 스 열의 개념을, SQL Server 2000 또는 SQL Server 2005에 SQL Server를 사용하는 경우 아니 당신이 저장 널 (NULL)에서 공간 "절약"을 인식하지 무슨 상관.

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

    2.SQL Server는 NULL을 표시하는 비트가 있습니다. 컬럼이 NOT NULL로 정의되어있는 경우 사용 그런 비트가 없다

    SQL Server는 NULL을 표시하는 비트가 있습니다. 컬럼이 NOT NULL로 정의되어있는 경우 사용 그런 비트가 없다

    VARCHAR 스토어 데이터에 가변 길이를 이용한다 (그리고 오버 실제 데이터가 얼마나 표시의 보유) CHAR 폭이 고정되어있는 반면,.

    VARCHAR는 길이 표시를 필요로하고, CHAR는 항상 한 바이트를 사용합니다 그래서 그 기준에 CHAR (1) NOT NULL은 VARCHAR (1) NOT NULL이 아닌 "짧은"입니다.

    편집 : NULL을 허용하는 BIT 필드를 갖는 두 개의 비트를 필요로하는 것으로 그것을 저장합니다! 나는 종종이가 저장 NULL에 필요하지 않은 고려하지 않은 있지만, 그래서 실수로 조금 낭비하고 NOT NULL로 설정되어 있지 않은 BIT 필드를 참조

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

    3.오라클에서는 컬럼의 종류와 행의 위치에 의존한다.

    오라클에서는 컬럼의 종류와 행의 위치에 의존한다.

    널 (NULL) 컬럼은 행의 마지막 인 경우에, 그들은 전혀 공간을 차지하지 않습니다. 오라클은 각 행에 총 행 크기, 크기가 NULL 고려하지 않는 모든 것을 앞에 추가합니다.

    널 (NULL) 컬럼 후 일부가 아닌 데이터가 NULL이면 NULL은 (인, NULL 형) 0xFF를 단일 바이트로 저장된다.

    빈 VARCHAR2는 NULL에 해당합니다. 당신이 SELECT 목록에서 반환 된 문자 NULL의 유형을 테스트하는 경우, 그것은 당신에게 VARCHAR2 (0)를 제공 할 것입니다.

  4. ==============================

    4.이것은하지 열 값으로서 비트 맵에 저장되어있다.

    이것은하지 열 값으로서 비트 맵에 저장되어있다.

    예 : 중간 이름이라고 입력 가능 VARCHAR 컬럼

    당신은 아주 작은 테이블이없는 한, 하나의 컬럼 CHAR (1), 그 다음이 더 효율적 말한다

    링크 1 링크 2

  5. ==============================

    5.당신이 VARCHAR 또는 NVARCHAR 데이터 유형을 사용하는 경우 행에 의해 사용되는 바이트의 수는 작다. 이 테이블을 만들 수있는 이유입니다 (하지만 안)이 그 수있는 것보다 더 많은 잠재적 인 바이트 실제로 레코드에 저장한다.

    당신이 VARCHAR 또는 NVARCHAR 데이터 유형을 사용하는 경우 행에 의해 사용되는 바이트의 수는 작다. 이 테이블을 만들 수있는 이유입니다 (하지만 안)이 그 수있는 것보다 더 많은 잠재적 인 바이트 실제로 레코드에 저장한다.

  6. ==============================

    6.오라클 11G에서, 나 또한 같은 상황이 있었다. 당신은 중간이나 끝 부분에 관계없이 위치의 열 NULL을 설정하여 기존 행에 의해 점령 (체크 DBA_SEGMENTS) 공간을 확보 할 수 없다.

    오라클 11G에서, 나 또한 같은 상황이 있었다. 당신은 중간이나 끝 부분에 관계없이 위치의 열 NULL을 설정하여 기존 행에 의해 점령 (체크 DBA_SEGMENTS) 공간을 확보 할 수 없다.

    UPDATE AUCORE_QA.SYSTEM_AUDIT_LOGS SET KEY=NULL;
    SELECT OWNER, TABLESPACE_NAME , SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024 MB
    FROM DBA_SEGMENTS 
    WHERE OWNER LIKE 'AUCORE_QA' AND SEGMENT_TYPE='TABLE' AND SEGMENT_NAME like '%AUDIT_LOG%'
    ORDER BY BYTES DESC;
    

    그러나, 나는 열의 Null 허용 '을 만든 이후 삽입 된 행에 대한 비용 절감 저장을 참조 할 수 있었다.

    ALTER TABLE SYSTEM_AUDIT_LOGS MODIFY KEY NULL;
    
  7. from https://stackoverflow.com/questions/556363/space-used-by-nulls-in-database by cc-by-sa and MIT license