반응형
/********************************************************************************************
-- Title : [2k8] SPARSE NULL 컬럼 비교
-- Reference : tdon.blog.me
-- Key word : sparse not null sp_spaceused 스파스
********************************************************************************************/
-- SSAS로 많이 문의 드렸던 과거 필라넷의 권0돈 주임님.
-- 어디론가 이직하셨다는데..
-- 우얏든, SPARSE 컬럼은 고정길이 NULL허용 필드에 쓰면 좋다.
-- 제약사항
ㅇ not null은 지원하지 않음
ㅇ geography, geometry, image, ntext, text, timestamp, 사용자 정의 형식은 지원하지 않음.
-- SPARSE 컬럼에 지원되지 않는 사항
ㅇ ROWGUIDCOL 또는 IDENTITY
ㅇ 기본값을 사용할 수 없음
ㅇ 클러스터 인덱스나 유니크 인덱스의 일부가 될 수 없음
ㅇ 파티션 키로 사용될 수 없음
ㅇ 사용자 정의 형식
USE tempdb;
GO
-- Title : [2k8] SPARSE NULL 컬럼 비교
-- Reference : tdon.blog.me
-- Key word : sparse not null sp_spaceused 스파스
********************************************************************************************/
-- SSAS로 많이 문의 드렸던 과거 필라넷의 권0돈 주임님.
-- 어디론가 이직하셨다는데..
-- 우얏든, SPARSE 컬럼은 고정길이 NULL허용 필드에 쓰면 좋다.
-- 제약사항
ㅇ not null은 지원하지 않음
ㅇ geography, geometry, image, ntext, text, timestamp, 사용자 정의 형식은 지원하지 않음.
-- SPARSE 컬럼에 지원되지 않는 사항
ㅇ ROWGUIDCOL 또는 IDENTITY
ㅇ 기본값을 사용할 수 없음
ㅇ 클러스터 인덱스나 유니크 인덱스의 일부가 될 수 없음
ㅇ 파티션 키로 사용될 수 없음
ㅇ 사용자 정의 형식
USE tempdb;
GO
/*
-- 가변길이 NULL SPARSE 비교
*/
DROP TABLE tbl_non_sparse, tbl_sparse;
-- 가변길이 NULL SPARSE 비교
*/
DROP TABLE tbl_non_sparse, tbl_sparse;
-- null 테이블 생성
CREATE TABLE tbl_non_sparse
( id INT NOT NULL IDENTITY PRIMARY KEY
, seq INT NOT NULL
, num NVARCHAR(20) NULL
);
-- sparse 테이블 생성
CREATE TABLE tbl_sparse
( id INT NOT NULL IDENTITY PRIMARY KEY
, seq INT NOT NULL
, num NVARCHAR(20) SPARSE NULL
);
-- null 테이블에 100만건 저장
WITH cte_temp(num)
AS
( SELECT 1 "num"
UNION ALL
SELECT num + 1 FROM cte_temp WHERE num + 1 <= 100
)
INSERT INTO tbl_non_sparse
SELECT A.num, NULL FROM cte_temp A
CROSS JOIN cte_temp B
CROSS JOIN cte_temp C;
-- sparse 테이블에 100만건 저장
WITH cte_temp(num)
AS
( SELECT 1 "num"
UNION ALL
SELECT num + 1 FROM cte_temp WHERE num + 1 <= 100
)
INSERT INTO tbl_sparse
SELECT A.num, NULL FROM cte_temp A
CROSS JOIN cte_temp B
CROSS JOIN cte_temp C;
-- 공간 비교(동일)
EXEC sp_spaceused 'tbl_non_sparse';
EXEC sp_spaceused 'tbl_sparse';
/*
-- 고정길이 NULL SPARSE 비교
*/
DROP TABLE tbl_non_sparse, tbl_sparse;
-- null 테이블 생성
CREATE TABLE tbl_non_sparse
( id INT NOT NULL IDENTITY PRIMARY KEY
, seq INT NOT NULL
, num NCHAR(20) NULL
);
-- sparse 테이블 생성
CREATE TABLE tbl_sparse
( id INT NOT NULL IDENTITY PRIMARY KEY
, seq INT NOT NULL
, num NCHAR(20) SPARSE NULL
);
-- null 테이블에 100만건 저장
WITH cte_temp(num)
AS
( SELECT 1 "num"
UNION ALL
SELECT num + 1 FROM cte_temp WHERE num + 1 <= 100
)
INSERT INTO tbl_non_sparse
SELECT A.num, NULL FROM cte_temp A
CROSS JOIN cte_temp B
CROSS JOIN cte_temp C;
-- sparse 테이블에 100만건 저장
WITH cte_temp(num)
AS
( SELECT 1 "num"
UNION ALL
SELECT num + 1 FROM cte_temp WHERE num + 1 <= 100
)
INSERT INTO tbl_sparse
SELECT A.num, NULL FROM cte_temp A
CROSS JOIN cte_temp B
CROSS JOIN cte_temp C;
-- 공간 비교(차이 남)
EXEC sp_spaceused 'tbl_non_sparse';
EXEC sp_spaceused 'tbl_sparse';
반응형