반응형

테이블 - 데이터 형식 및 우선 순위. 선행 정렬

SQL Server에서는 많은 데이터 형식들을 제공하는데 적절한 데이터 형식을 선택하는 것은 충분한 공간을 확보하면서도 저장 공간을 낭비하는 것을 피할 수 있다.

 

1. 데이터 형식

SQL Server에서 각 열, 지역 변수, 식 및 매개 변수는 관련된 데이터 형식을 가진다. SQL Server는 SQL Server에서 사용할 수 있는 모든 데이터 형식을 정의하는 일련의 시스템 데이터 형식을 정의할 수 있다.

데이터 형식, 데이터 정렬, 전체 자릿수, 소수 자릿수 또는 길이가 다른 두 식이 연산자에 의해 결합된 경우 그 특징은 다음 규칙에 따라 결정 된다.

  1. 결합 결과의 데이터 형식은 입력 식의 데이터 형식에 데이터 형식 우선 순위 규칙을 적용하여 결정 된다.
  2. 결과 데이터 형식이 CHAR, VARCHAR, TEXT, NCHAR, NVARCHAR 또는 NTEXT인 경우 결과의 데이터 정렬은 데이터 정렬 우선 순위 규칙에 따라 결정 된다.
  3. 결과의 전체 자릿수, 소수 자릿수 및 길이는 입력 식의 전체 자릿수, 소수 자릿수, 길이에 따라 달라진다.

(MSDN 참고:
http://technet.microsoft.com/ko-kr/library/ms187752.aspx)

SQL Server에서 데이터 형식은 다음의 범주로 구성된다.

정확한 수치

유니코드 문자열

근사치

이진 문자열

날짜 및 시간

기타 데이터 형식

문자열

 

 

SQL Server에서 일부 데이터 형식은 저장 특징에 따라 다음 그룹에 속하도록 지정 된다.

큰 값 데이터 형식 : varchar(max), nvarchar(max)varbinary(max)
큰 개체 데이터 형식 : text, ntext, image, varchar(max), nvarchar(max), varbinary(max) 및 xml

정확한 수치

데이터 형식

범위 (정수 데이터를 사용하는 숫자 데이터 형식)

저장소

bigint

-2^63(-9,223,372,036,854,775,808) ~ 2^63-1(9,223,372,036,854,775,807)

8바이트

int

-2^31(-2,147,483,648) ~ 2^31-1(2,147,483,647)

4바이트

smallint

-2^15(-32,768) ~ 2^15-1(32,767)

2바이트

tinyint

0 ~ 255

1바이트

데이터 형식

범위 (전체 자릿수와 소수 자릿수가 고정된 숫자 데이터 형식)

저장소

decimal[ (p[ ,s] )] numeric[ (p[ ,s] )]

1 – 9자리

5바이트

10 – 19자리

9바이트

20 – 28자리

13바이트

29 - 38자리

17바이트

bit

1, 0, NULL

1바이트

데이터 형식

범위 (통화 또는 통화 값을 나타내는 데이터 형식)

저장소

Money

-922,337,203,685,477.5808 - 922,337,203,685,477.5807

8바이트

smallmoney

- 214,748.3648 - 214,748.3647

4바이트

 

함수는 매개 변수 식이 bigint 데이터 형식인 경우에만 bigint를 반환한다. SQL Server에서는 다른 정수 데이터 형식(tinyint, smallint, int)을 자동으로 bigint로 승격 시키지 않는다.

테이블에 8개 이하의 bit열이 있다면 열은 1바이트로 저장된다. 9 – 16개 bit의 열이 있을 경우 2바이트로 저장. 이런식으로 계속 진행 된다.

Money 및 smallmoney 데이터 형식은 1/10000까지의 정확도를 가진 통화 단위를 나타낸다.

 

근사치

데이터 형식

범위

저장소

float

- 1.79E+308에서 -2.23E-308, 0 2.23E-308에서 1.79E+308

1-24 / 7자리 / 4바이트

real

- 3.40E+38에서 -1.18E - 38, 0 1.18E-38에서 3.40E + 38

25-53 / 15자리 / 8바이트

 

날짜 및 시간

데이터 형식

범위

저장소

date

0001-01-01 ~ 9999-12-31 / 10자리 / 정확도 1.

3바이트(고정)

datetime

1753-01-01 ~ 9999-12-31 / 19 ~ 23자리 /정확도 .000, .003또는 .007 단위 반올림

8바이트

Datetime2

0001-01-01 ~ 9999-12-31 / 19 ~ 27자리 / 정확도 100나노초

전체 자릿수 3미만 : 6바이트

3,4 경우 : 7바이트

전체 자릿수 : 8바이트

datetimeoffset

0001-01-01 ~ 9999-12-31 / 26 ~ 34자리 / 정확도 100나노초

10바이트

smalldatetime

1900-01-01 ~ 2079-06-06 / 19자리 / 정확도 1

4바이트(고정)

time

00:00:00.0000000 ~ 23:59:59.9999999 / 8 ~ 16 자리 / 정확도 100나노초

5바이트(고정)

데이터 형식

출력

time

12:35:29. 1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

datetimeoffset

2007-05-08 12:35:29.1234567 +12:15

 

문자열

데이터 형식

범위(고정 길이 또는 가변길이 문자 데이터 형식)

저장소

char

1 ~ 8000 / 8000바이트 초과시 max 사용

n바이트 / max(2^31-1)

Nchar(유니코드)

1 ~ 4000

N * 2 바이트 / max(2^31-1)

varchar

1 ~ 8000 /

n바이트 / max(2^31-1)

Nvarchar(유니코드)

1 ~ 4000

n바이트 / max(2^31-1)

text

2^31 - 1(2,147,483,647)

2,147,483,647 바이트

Ntext(유니코드)

2^30 - 1(1,073,741,823)

2,147,483,647 바이트

 

이진 문자열

데이터 형식

범위(고정 길이 또는 가변길이 문자 데이터 형식)

저장소

binary

1 ~ 8000 / 8000바이트 초과시 max 사용

n바이트 / max(2^31-1)

varbinary

1 ~ 8000 / 8000바이트 초과시 max 사용

n바이트 / max(2^31-1)

image

0 ~ 2^31-1(2,147,483,647)

2,147,483,647 바이트

 

2. 데이터 형식 우선 순위

(MSDN 참고:
http://technet.microsoft.com/ko-kr/library/ms190309.aspx)

 

연산자로 데이터 형식이 다른 두 식을 결합할 경우 데이터 형식 우선 순위 규칙에 따라 우선 순위가 낮은 데이터 형식이 우선 순위가 높은 데이터 형식으로 변환된다. 이때 암시적 변환이 지원되지 않으면 오류가 반환 된다. 피연산자 식이 같은 데이터 형식일 경우에는 연산 결과도 같은 데이터 형식이 된다.

  1. 사용자 정의 데이터 형식(가장 높음)
  2. sql_variant
  3. xml
  4. datetimeoffset
  5. datetime2
  6. datetime
  7. smalldatetime
  8. date
  9. time
  10. float
  11. real
  12. decimal
  13. money
  14. smallmoney
  15. bigint
  16. int
  17. smallint
  18. tinyint
  19. bit
  20. ntext
  21. text
  22. image
  23. timestamp
  24. uniqueidentifier
  25. nvarchar(nvarchar(max) 포함)
  26. nchar
  27. varchar(varchar(max) 포함)
  28. char
  29. varbinary(varbinary(max) 포함)
  30. binary(가장 낮음)

 

3. 선행 정렬

(MSDN 참고:
http://technet.microsoft.com/ko-kr/library/ms179886.aspx)

데이터 정렬 선행 규칙은 char, varchar, text, nchar, nvarcharntext 문자열 데이터 형식에만 적용됩니다. 그 외 다른 데이터 형식의 개체는 데이터 정렬 평가에 적용되지 않습니다.

피연산자 강제 변환 수준

명시적 X

암시적 X

기본값 강제 변환

데이터 정렬 없음

명시적 Y

오류 발생

결과는 명시적 Y

결과는 명시적 Y

결과는 명시적 Y

암시적 Y

결과는 명시적 X

결과는 데이터 정렬 없음

결과는 암시적 Y

결과는 데이터 정렬 없음

기본값 강제 변환

결과는 명시적 X

결과는 암시적 X

결과는 기본값 강제 변환

결과는 데이터 정렬 없음

데이터 정렬 없음

결과는 명시적 X

결과는 데이터 정렬 없음

결과는 데이터 정렬 없음

결과는 데이터 정렬 없음

 

  1. 연산자와 함수는 데이터 정렬을 인식하거나 또는 인식하지 않는다.
  2. 비교 연산자와 MAX, MIN, BETWEEN, LIKE, IN 연산자는 데이터 정렬을 인식한다.
  3. CAST, CONVERT, COLLATE 함수는 char, varchartext 데이터 형식에 대해 데이터 정렬을 인식한다.
  4. 문자열을 반환하지만 입력 문자열은 사용하지 않는 기본 제공 함수의 경우 결과 문자열은 기본값 강제 변환이 되며 현재 데이터베이스의 데이터 정렬 또는 함수를 참조하는 사용자 정의 함수, 저장 프로시저, 트리거를 포함하는 데이터베이스의 데이터 정렬이 할당된다.

 

이로써 SQL Server에서 사용하는 데이터 형식과 크기에 대해서 알아 보았는데 적절한 데이터 타입은 저장소의 효율성 뿐만 아니라 데이터의 처리에 있어서도 우월한 성능을 발휘 할 수 있다.

 

반응형

+ Recent posts