[설문조사 사이트 테스트]
이름 :
점넷(.Net)
분류 전체보기 (176)
점넷공간 (38)
COMPUTER (1)
.NET (29)
DB (36)
SCRIPT (3)
MarkUp & CSS (3)
OS (7)
IT Story (52)
Information (7)
«   2024/05   »
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 31
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2008. 6. 10. 15:28
[DB]

서로 다른 데이터 형식이 연산을 할 때

 

1)

where 'a' = 1

 

조건절에서 문자열 과 정수가 비교 연산을 한다면 서로 다른 자료형의 연산이기 때문에

자동 형 변환이 일어난다. 즉 우선순위가 낮은 자료형이 우선순위가 높은 자료형으로 변환하게 된다.(정수형이 문자형보다 우선순위가 높기 때문에 문자형이 정수형으로 변환하게 된다.)

 

위의 예1 에서는 'a'가 정수형으로 변환하게 되는데 a는 정수가 아니기 때문에 오류가 발생한다.

 

2)

where '1' = 1

 

2 역시 문자형과 정수형의 연산이지만 '1'는 정수형으로 변환이 가능해서 오류가 발생하지 않는다. where cast('1' as int) = 1 형태가 되는 것이다.

 

3)

idx varchar(1) idx라는 문자형 인덱스 필드라고 {'1','2','3'}형태의 값이 들어있다고 가정

where idx = 1

 

idx 필드가 문자형이기 때문에 자동 형변환이 되고 변환시 오류가 발생하지 않는다. 하지만.. 인덱스 필드가 가공이 되면(여기서는 형변환이 되면서 의도하지 않게 인덱스 필드가 가공됨) 인덱스를 사용할 수 없게된다.

 

4)

idx int idx라는 정수형 인덱스 필드라고 {1,2,3} 형태의 값이 들어있다고 가정

where idx = '1'

 

3을 반대로 적용해보았다. 이번엔 idx필드가 정수형이고 비교값이 문자형이다.

idx필드의 정수형이 비교되는 문자형보다 우선순위가 높아서 ‘1’값이 cast('1' as int)행태로 변환이 된다. idx필드가 가공(여기서는 형변환) 되는게 아니라 인덱스를 사용할 수가 있다.

 

즉 자료형에도 우선순위가 있고 우린 이특성을 잘 이해해야 한다.

그렇지 못할 경우 원하지 않는 형변환이 발생하면서 인덱스를 사용하지 못하게 된다.

쿼리시 인덱스의 사용 여부에 때라 성능에 큰차이가 있는건 누구나 잘아는 사실일 것이다.

 

아래는 SQL Server 2005에서 사용하는 데이터 형식의 우선순위를 나타낸 목록이다.

1.     사용자 정의 데이터 형식(가장 높음)

2.     sql_variant

3.     xml

4.     datetime

5.     smalldatetime

6.     float

7.     real

8.     decimal

9.     money

10.  smallmoney

11.  bigint

12.  int

13.  smallint

14.  tinyint

15.  bit

16.  ntext

17.  text

18.  image

19.  timestamp

20.  uniqueidentifier

21.  nvarchar(nvarchar(max) 포함)

22.  nchar

23.  varchar(varchar(max) 포함)

24.  char

25.   varbinary(varbinary(max) 포함)

26.   binary(가장 낮음)

━━━━━━━━━━━━━━━
by 한상국(han3925)
MAIL  han3925@gmail.com
         han3925@hotmail.com
BLOG
pointnet.tistory.com
━━━━━━━━━━━━━━━