[Database] 스파스 열
2021. 8. 17. 10:54

● 스파스 열이란?

- 간단히 'NULL 값에 대해 최적화된 저장소가 있는 일반열' 로 정의할 수 있다.

- 즉, NULL 값이 많이 들어갈 것으로 예상되는 열이라면 스파스 열로 지정해 놓을 경우에 많은 공간 절약 효과를 볼수 있다.

- 그러나 NULL 값이 별로 없는 열이라면 그 크기가 더 필요해 진다.

 

● 스파스 열 지정하는 방법

- 간단히 CREATE TABLE 또는 ALTER TABLE 로 열을 정의할 때 뒤에 SPARSE 예약어만 써주면 된다.

 

USE tempdb;
CREATE DATABASE sparseDB;

USE sparseDB;
CREATE TABLE charTbl (id int identity, data char(100) NULL);
CREATE TABLE sparseCharTbl ( id int identity, data char(100) SPARSE NULL);

DECLARE @i INT = 0
WHILE @i < 10000
BEGIN
	INSERT INTO charTbl VALUES(null); -- null 값 3회
	INSERT INTO charTbl VALUES(null);
	INSERT INTO charTbl VALUES(null);
	INSERT INTO charTbl VALUES(REPLICATE('A', 100)); -- 실제 데이터 1회
	INSERT INTO sparseCharTbl VALUES(null);
	INSERT INTO sparseCharTbl VALUES(null);
	INSERT INTO sparseCharTbl VALUES(null);
	INSERT INTO sparseCharTbl VALUES(REPLICATE('A', 100)); -- 실제 데이터 1회
	SET @i += 1
END

- 데이터를 null값 75% 비중으로 4만건의 데이터를 입력했을때

sparse열을 지정하지 않은 경우 데이터공간 4.5MB

 

sparse열을 지정한 경우 데이터공간 1.6MB

 

 

- 반면 NULL 값이 거의 없는 열에 SPARSE 예약어를 지정할 경우

TRUNCATE TABLE charTbl;-- 전체 행 데이터 삭제
TRUNCATE TABLE sparseCharTbl;-- 전체 행 데이터 삭제
GO
DECLARE @i INT = 0
WHILE @i < 40000
BEGIN
	INSERT INTO charTbl VALUES(REPLICATE('A', 100));
	INSERT INTO sparseCharTbl VALUES(REPLICATE('A', 100));
	SET @i += 1
END

 

sparse열을 지정하지 않은 경우 데이터공간 4.5MB

 

sparse열을 지정한 경우 데이터공간 5MB

 

- 즉, null 값이 별로 없는 경우에 스파스 열로 지정하면 오히려 공간을 더 낭비하는 역효과가 난다.

'프로그래밍 > Database' 카테고리의 다른 글

[Database] 스키마(Schema)  (0) 2021.08.17
[Database] 임시 테이블  (0) 2021.08.17
[Database] 조인(JOIN)  (0) 2021.08.11
[Database] 트리거의 기본용도  (0) 2021.07.27
[Database] MySQL 데이터베이스 백업 및 옮기기  (0) 2021.05.25