본문 바로가기

카테고리 없음

SQL Server에서 NULL 값 vs 빈 문자열의 저장 공간 비교


데이터베이스 설계에서 NULL 가능한 필드와 NOT NULL 필드 사이의 선택은 중요한 결정입니다. 특히, 많은 개발자들이 NULL 값이 빈 문자열보다 저장 공간을 덜 차지할 것이라는 잘못된 가정을 하기도 한다. SQL Server 환경에서 이러한 가정이 실제로 타당한지 검증하기 위해 직접 실험을 해보았다. 

SQL Server 2005 환경에서 두 개의 테이블을 생성하고, 각각의 테이블에 50,000개의 데이터를 삽입하는 실험을 진행했다. 실험에 사용된 테이블은 다음과 같다. 

temp 테이블: data 컬럼을 varchar(500)으로 설정하고, NULL 값을 허용
temp2 테이블: data 컬럼을 varchar(500)으로 설정하고, NULL을 허용하지 않음 (NOT NULL).


각 테이블에 대하여 NULL 값과 빈 문자열('')을 각각 삽입하였고 이를 통해 두 값이 디스크 공간에 미치는 영향을 비교할 수 있다.

create table temp(data varchar(500) NULL);
create table temp2(data varchar(500) NOT NULL);

declare @counter int = 0;
while (@counter < 50000)
BEGIN
 insert into temp(data) values(NULL);
 insert into temp2(data) values('');
 SET @Counter = @Counter + 1;
END


데이터 삽입 후, sp_spaceused 시스템 저장 프로시저를 사용하여 각 테이블의 디스크 사용량을 확인하였다. 놀랍게도 두 테이블은 정확히 같은 크기를 차지했다. 이는 NULL 값과 빈 문자열이 SQL Server에서 동일한 저장 공간을 차지한다는 것을 증명한다. 

이 실험은 NULL 값을 사용하는 것이 저장 공간을 절약한다는 흔한 믿음이 잘못되었음을 보여준다. 데이터베이스 필드에서 NULL 값을 허용하는 결정은 저장 공간의 효율성이 아니라, 데이터의 의미와 사용 사례에 기반해야 한다. NULL 값과 빈 문자열은 서로 다른 의미를 가지며, 데이터베이스 설계 시 이를 명확히 구분하여 사용하는 것이 중요하다.