● 스파스 열이란?
- 간단히 '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만건의 데이터를 입력했을때
- 반면 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
- 즉, 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 |