2013-03-01 2 views
0

Tinyint vs Bit에서 논의했듯이 테이블에 8 비트 필드가있는 경우 레코드 크기는 하나만 있습니다.SQL 레코드와 SQL 색인에서 Null 허용 비트 필드가 차지하는 공간은 어느 정도입니까?

not null으로 선언 된 경우에만 해당한다고 가정합니다.

nullable 비트 필드는 어떻게됩니까? 그들은 2 비트 또는 전체 tinyint 복용하고 있습니까?

색인은 어떻습니까? 얼마나 많은 공간이 nullable 또는 Nullable 비트 필드는 내부의 필드를 다른 비트 또는 비트 필드와 조합 된 INCLUDED 목록 안에 사용하면 인덱스를 사용합니까? 다른 비트 및 비 비트 필드와 함께 인덱스 표현식에서 비트를 사용하면 어떻습니까?

+2

글쎄, * 스키마를 사용하여 테이블을 만들 수있다. 하나는 널을, 하나는 널이 아니고, 하나는 * 데이터로 채우고, 다른 하나는 'sp_spaceused'와 같은 것의 차이를 스케일로 보는 것이다. –

+1

나는 @AaronBertrand에 동의하지만, 이것만으로 답을 찾을 수있을뿐만 아니라 가설을 실험하고 테스트하는 마음을 갖게 될 것입니다. – Zane

답변

2

SQL Server의 세부 사항을 말할 수 없으며 (세부 사항을 알지 못해서 말하기 위해 슬램했습니다.) 그러나 데이터베이스는 null 허용 필드 당 1 비트 만 필요합니다. 데이터베이스가 더 많은 공간을 할당한다면 32 비트 정렬 정수처럼 성능 이점을 기대할 수 있기 때문입니다.

일반적인 RDBMS의 색인은 b- 나무입니다. 비트 필드 용 트리는 설정 비트에 대한 하나의 브랜치와 클리어 비트에 대한 하나의 브랜치입니다. Nullable이면 다른 분기. 트리의 끝은 해당 조건과 일치하는 레코드 목록입니다.