가끔씩 개발자들의 실수로 인해... 어떠한 필드가 Index를 사용하지 못하고 convert가 발생한는것을 종종 볼 수 있습니다.
왜! 그런고 하니... 연자사로 데이터가 결합할 경우 데이터형식의 따라 우선순위가 정해지는데 우선순위가 낮은것이 우선순위가 높은것으로 자동 형변환를 하기 때문에 발생하게 되는 것입니다.
[참고] http://technet.microsoft.com/ko-kr/library/ms190309.aspx
왜! 그런고 하니... 연자사로 데이터가 결합할 경우 데이터형식의 따라 우선순위가 정해지는데 우선순위가 낮은것이 우선순위가 높은것으로 자동 형변환를 하기 때문에 발생하게 되는 것입니다.
[참고] http://technet.microsoft.com/ko-kr/library/ms190309.aspx
데이터 형식 우선 순위SQL Server에서의 데이터 형식에 대한 우선 순위
- 사용자 정의 데이터 형식(가장 높음)
- sql_variant
- xml
- datetimeoffset
- datetime2
- datetime
- smallldatetime
- date
- time
- float
- real
- decimal
- money
- smallmoney
- bigint
- int
- smallint
- tinyint
- bit
- ntext
- text
- image
- timestamp
- uniqueidentifier
- nvarchar(nvarchar(max) 포함)
- nchar
- varchar(varchar(max) 포함)
- char
- varbinary(varbinary(max) 포함)
- 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
----------------------------------------------------------
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 |