본문 바로가기

MSSQL/T-SQL

데이터형식 우선 순위


가끔씩 개발자들의 실수로 인해... 어떠한 필드가 Index를 사용하지 못하고 convert가 발생한는것을 종종 볼 수 있습니다.

왜! 그런고 하니... 연자사로 데이터가 결합할 경우 데이터형식의 따라 우선순위가 정해지는데 우선순위가 낮은것이 우선순위가 높은것으로 자동 형변환를 하기 때문에 발생하게 되는 것입니다.

[참고] http://technet.microsoft.com/ko-kr/library/ms190309.aspx

데이터 형식 우선 순위
SQL Server에서의 데이터 형식에 대한 우선 순위

  1. 사용자 정의 데이터 형식(가장 높음)
  2. sql_variant
  3. xml
  4. datetimeoffset
  5. datetime2
  6. datetime
  7. smallldatetime
  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(가장낮음)

예를들어, 다음과 같은 쿼리가 있을때 쿼리는 index를 검색하지 못합니다.

-- 밑에같은 예제가 좀 어이없지만 ^^;; 그래도 예제임 ^^;
-- 조건절에 member이 index로 잡혀있다고 가정하에, member의 데이터형은 char(10)이라고 가정하에

Select * From indextest where member_no = N'3'

-- 위와같은 쿼리에는 member_no가 char형이고 조건값이 유닉코드로 넘어왔기 때문에
-- member_no가 데이터 선행 규칙에 따라 형변환이 일어나 인덱스를 타지 못하게 됩니다.


----------------------------------------------------------
DBA 이승연
GRAVITY co., Ltd 
Global Business Dept / Tech Support

http://www.gravity.co.kr
http://www.ddoung2.com
----------------------------------------------------------

'MSSQL > T-SQL' 카테고리의 다른 글

GROUP BY에 대하여  (0) 2009.04.28
SELECT절 집계 함수  (0) 2009.04.28
SQL에서의 관계대수  (0) 2009.04.28
모든테이블 삭제하기  (1) 2009.03.27
공백을 구분하여 문자열 자르기  (0) 2009.03.26