티스토리 뷰

현재 개발중인 시스템의 날짜 컬럼을 주로 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가 더 효율적으로 보인다.


'SQL Server' 카테고리의 다른 글

SQL Server 날짜 및 시간 데이터타입 비교  (0) 2018.07.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함