티스토리 뷰

SQL Server

날짜 관련 컬럼 DATE 와 VARCHAR 비교

탐구하는 SEA&SUN 2018. 7. 27. 13:36

현재 개발중인 시스템의 날짜 컬럼을 주로 VARCHAR(8) 로 사용 중


SQL Server 날짜 및 시간 데이터타입 비교 포스트 작성 중 DATE 타입의 저장소 크기가 3바이트(고정)이라는 것을 보고 아래와 같이 테스트를 를 해 보았다.

테이블 생성

CREATE TABLE [dbo].[TEST_DATE](
	[REG_DT] [date] NULL
)
GO

CREATE TABLE [dbo].[TEST_VARCHAR8](
	[REG_DT] [varchar](8) NULL
)
GO

CREATE TABLE [dbo].[TEST_VARCHAR10](
	[REG_DT] [varchar](10) NULL
)
GO

데이터입력

BEGIN

	SET NOCOUNT ON;

	DECLARE
		@FROM_DT DATE,
		@END_DT DATE

	SELECT
		@FROM_DT = CONVERT(DATE,'1900-01-01'),
		@END_DT  = CONVERT(DATE,'2079-06-05')	--DATEADD return smalldatetime

	WHILE @FROM_DT <= @END_DT
	BEGIN

		INSERT INTO TEST_DATE
		VALUES (@FROM_DT)

		INSERT INTO TEST_VARCHAR8
		VALUES (CONVERT(VARCHAR(8),@FROM_DT,112))

		INSERT INTO TEST_VARCHAR10
		VALUES (CONVERT(VARCHAR(10),@FROM_DT))

		SET @FROM_DT = DATEADD(dd,1,CONVERT(smalldatetime,@FROM_DT))

	END

END

테이블크기 조회

sp_spaceused 'TEST_DATE'
go

sp_spaceused 'TEST_VARCHAR8'
go

sp_spaceused 'TEST_VARCHAR10'
go

조회 결과

 name

 rows

 reserved

 data

 index_size

 unused

 TEST_DATE

 65535

 840 KB

 824 KB

 8 KB

 8 KB

 TEST_VARCHAR8

 65535

 1480 KB

 1432 KB

 8 KB

 40 KB

 TEST_VARCHAR10

 65535

 1608 KB

 1568 KB

 8 KB

 32 KB

테이블 삭제

DROP TABLE TEST_DATE
GO

DROP TABLE TEST_VARCHAR8
GO

DROP TABLE TEST_VARCHAR10
GO

결론

날짜형식의 컬럼이라면 VARCHAR 보다는 DATE 를 사용하자. 공간적인 측면과 데이터 정합성( VARCHAR는 날짜범위를 벗어나더라도 에러가 발생하지 않음 ) 측면에서도 DATE가 더 효율적으로 보인다.


댓글
댓글쓰기 폼