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 바이트의 공간을 차지합니다.
NULL
데이터베이스 의 값은 1 바이트의 스토리지를 차지하는 시스템 값이며 공백이나 0 또는 다른 기본값과 달리 값이 존재하지 않음을 나타냅니다.
null 값으로 찍은 크기와 관련하여 안내해 주시겠습니까?
필드가 고정 너비 인 경우 NULL을 저장하면 다른 값 (필드 너비)과 동일한 공간이 사용됩니다.
필드가 가변 너비 인 경우 NULL 값은 공간을 차지하지 않습니다.
널값을 저장하는 데 필요한 공간 외에 널 입력 가능 컬럼을 갖는 오버 헤드도 있습니다. 각 행에 대해 널 입력 가능 컬럼 당 하나의 비트가 사용되어 해당 컬럼의 값이 널인지 여부를 표시합니다. 이는 열이 고정 길이인지 가변 길이인지에 관계없이 적용됩니다.
다른 출처의 정보에서 관찰 한 불일치 이유 :
첫 번째 기사의 시작은 약간의 오해의 소지가 있습니다. 이 기사에서는 NULL 값을 저장하는 비용이 아니라 NULL을 저장할 수 있는 비용 (즉, 열을 널 입력 가능하게 만드는 비용)에 대해 설명합니다. 스토리지 공간에서 컬럼을 널 입력 가능하게하는 데 비용이 드는 것은 사실이지만, 일단 값을 저장하는 것보다 가변 너비 컬럼의 경우보다 NULL을 저장하는 데 필요한 공간이 적습니다.
두 번째 링크는 Microsoft Access에 대한 질문 인 것 같습니다. Access에서 NULL을 저장하는 방법에 대한 세부 정보를 모르지만 SQL Server와 다른 경우 놀라지 않을 것입니다.
다음 링크는 열 길이가 가변 길이 인 경우 0 바이트 varchar
를 NULL
취 한다고 주장합니다 (값이 1인지 아닌지를 표시하는 데 1 바이트를 사용함 NULL
).
위의 링크와 아래의 링크는 고정 길이 열, 즉 char(10)
또는 int
의 값이 NULL
열 길이를 차지 한다고 주장합니다 (1 바이트를 더한지 여부에 대한 플래그 NULL
).
예 :
- 당신이 설정 한 경우
char(10)
에NULL
, 그것은 차지하고 10 바이트 (교체 아웃 제로) - 은
int
(또한 제로로) 4 바이트 걸립니다. - 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
'Programming' 카테고리의 다른 글
argparse로 선택된 부속 명령 가져 오기 (0) | 2020.07.27 |
---|---|
원격 지점에서 체리 픽을하는 방법? (0) | 2020.07.27 |
notifyDataSetChanged 후에 Android ListView가 새로 고쳐지지 않습니다 (0) | 2020.07.26 |
Linq : GroupBy, 합계 및 개수 (0) | 2020.07.26 |
JavaScript에서 쿼리 문자열 매개 변수를 어떻게 삭제합니까? (0) | 2020.07.26 |