Programming

SQL Server에서 "Null"값의 크기

procodes 2020. 7. 27. 07:58
반응형

SQL Server에서 "Null"값의 크기


열이 10 개인 큰 테이블이 있습니다. 그중 4 개는 대부분 널로 남아 있습니다. null 값을 수행하는 쿼리에는 크기가 없거나 바이트 단위의 크기가 없습니다. 나는 그들 중 일부가 말하는 몇 가지 기사를 읽었습니다.

http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html

테이블에 NULL 값이 있으면 저장 공간을 차지하지 않는다는 오해가 있습니다. 사실 NULL 값은 2 바이트의 공간을 차지합니다.

SQL : NULL 값과 기본값 사용

NULL데이터베이스 값은 1 바이트의 스토리지를 차지하는 시스템 값이며 공백이나 0 또는 다른 기본값과 달리 값이 존재하지 않음을 나타냅니다.

null 값으로 찍은 크기와 관련하여 안내해 주시겠습니까?


필드가 고정 너비 인 경우 NULL을 저장하면 다른 값 (필드 너비)과 동일한 공간이 사용됩니다.

필드가 가변 너비 인 경우 NULL 값은 공간을 차지하지 않습니다.

널값을 저장하는 데 필요한 공간 외에 널 입력 가능 컬럼을 갖는 오버 헤드도 있습니다. 각 행에 대해 널 입력 가능 컬럼 당 하나의 비트가 사용되어 해당 컬럼의 값이 널인지 여부를 표시합니다. 이는 열이 고정 길이인지 가변 길이인지에 관계없이 적용됩니다.


다른 출처의 정보에서 관찰 한 불일치 이유 :

  • 첫 번째 기사의 시작은 약간의 오해의 소지가 있습니다. 이 기사에서는 NULL 값을 저장하는 비용이 아니라 NULL을 저장할 있는 비용 (즉, 열을 널 입력 가능하게 만드는 비용)에 대해 설명합니다. 스토리지 공간에서 컬럼을 널 입력 가능하게하는 데 비용이 드는 것은 사실이지만, 일단 값을 저장하는 것보다 가변 너비 컬럼의 경우보다 NULL을 저장하는 데 필요한 공간이 적습니다.

  • 두 번째 링크는 Microsoft Access에 대한 질문 인 것 같습니다. Access에서 NULL을 저장하는 방법에 대한 세부 정보를 모르지만 SQL Server와 다른 경우 놀라지 않을 것입니다.


다음 링크는 열 길이가 가변 길이 인 경우 0 바이트 varcharNULL한다고 주장합니다 (값이 1인지 아닌지를 표시하는 데 1 바이트를 사용함 NULL).

위의 링크와 아래의 링크는 고정 길이 열, 즉 char(10)또는 int의 값이 NULL열 길이를 차지 한다고 주장합니다 (1 바이트를 더한지 여부에 대한 플래그 NULL).

예 :

  1. 당신이 설정 한 경우 char(10)NULL, 그것은 차지하고 10 바이트 (교체 아웃 제로)
  2. int(또한 제로로) 4 바이트 걸립니다.
  3. 0 바이트 (+ 2 바이트) varchar(1 million)를 사용 하는 세트NULL

참고 : 약간의 접선에서 스토리지 크기는 varchar입력 한 데이터 길이 + 2 바이트입니다.


이 링크에서 :

각 행에는 널을 허용하는 열에 대한 널 비트 맵이 있습니다. 해당 열의 행이 null이면 비트 맵의 ​​비트는 1이고 그렇지 않으면 0입니다.

가변 크기 데이터 유형의 경우 정확한 크기는 0 바이트입니다.

고정 크기 데이터 유형의 경우 실제 크기는 바이트 단위의 기본 데이터 유형 크기 (기본값은 0, 숫자는 '')입니다.


NULL 값을 저장하면 공간이 필요하지 않습니다.

"사실, NULL 값은 2 바이트의 공간을 차지합니다."

이것은 오해입니다- 행 당 2 바이트 이며 모든 행이 nullable 열이 있는지 여부에 관계없이 2 바이트를 사용한다고 확신합니다.

데이터베이스의 NULL 값은 1 바이트의 스토리지를 차지하는 시스템 값입니다.

이것은 SQL Server가 아닌 일반적인 데이터베이스에 관한 것입니다. SQL Server는 1 바이트를 사용하여 NULL 값을 저장하지 않습니다.

참고 URL : https://stackoverflow.com/questions/3731172/how-much-size-null-value-takes-in-sql-server

반응형