테이블에서 NULL 값을 허용하는 컬럼에 사용하는 옵션으로 SPARSE 가 있습니다. [SQL Server 2008]
SPARSE 컬럼에 NULL 값이 입력되면 저장 공간을 전혀 차지 하지 않지만, NULL이 아닌 값이 저장될 경우에는 4byte의 추가 공간을 필요로합니다.
BOL에서는 SPARSE 컬럼의 사용으로 인해 20% ~ 40% 정도의 공간이 절약될 수 있다면 SPARSE 컬럼을 사용하라고 권고하는군요.
아래 표는 SPARSE 컬럼을 사용했을 때 40%의 공간을 절약하기 위해 필요한 NULL 값 비율을 데이터 타입 별로 나타내고 있습니다.
※ SPARSE 지정이 불가능한 데이터 타입
: geography, geometry, image, text, ntext, timestamp, UDT
용법 :
SPARSE 컬럼에 NULL 값이 입력되면 저장 공간을 전혀 차지 하지 않지만, NULL이 아닌 값이 저장될 경우에는 4byte의 추가 공간을 필요로합니다.
BOL에서는 SPARSE 컬럼의 사용으로 인해 20% ~ 40% 정도의 공간이 절약될 수 있다면 SPARSE 컬럼을 사용하라고 권고하는군요.
아래 표는 SPARSE 컬럼을 사용했을 때 40%의 공간을 절약하기 위해 필요한 NULL 값 비율을 데이터 타입 별로 나타내고 있습니다.
데이터 타입 |
NULL 비율 |
bit |
98% |
tinyint |
86% |
smallint |
76% |
int |
64% |
bigint |
52% |
real |
64% |
float |
52% |
smallmoney |
64% |
money |
52% |
smalldatetime |
64% |
datetime |
52% |
uniqueidentifier |
43% |
date |
69% |
datetime2(0) |
57% |
datetime2(7) |
52% |
time(0) |
69% |
time(7) |
60% |
datetimetoffset(0) |
52% |
datetimetoffset (7) |
49% |
decimal / numeric(1,s) |
60% |
decimal / numeric(38,s) |
42% |
varchar / char |
60% |
nvarchar / nchar |
60% |
varbinary / binary |
60% |
xml |
60% |
hierarchyid |
60% |
※ SPARSE 지정이 불가능한 데이터 타입
: geography, geometry, image, text, ntext, timestamp, UDT
용법 :
CREATE TABLE dbo.Demo (
docID int IDENTITY NOT NULL PRIMARY KEY,
title nvarchar(100) NOT NULL,
spec nvarchar(10) SPARSE NULL,
location int SPARSE NULL
);
SPARSE 컬럼은 NULL 이 아닌 값을 검색할 때 오버헤드가 있는데, 아래와 같이 NULL이 아닌 값만 필터링하여 인덱스를 생성하면 좋습니다.
CREATE INDEX IX_NN_Demo_location ON dbo.Demo (location) WHERE location IS NOT NULL;
'SQL Server > SQL Server Tip & Tech' 카테고리의 다른 글
MERGE 응용 - 1. UPSERT (0) | 2009.10.09 |
---|---|
12 Essential Steps After Installing SQL Server (0) | 2009.08.03 |
계륵 같은 SNAPSHOT 격리 수준 - SET TRANSACTION ISOLATION LEVEL SNAPSHOT (0) | 2009.07.24 |
hierarchyid의 method 정리 (1) | 2009.07.23 |
SQL Server 2008 암호화 - TDE (Transparent Data Encryption) (0) | 2009.07.22 |