본문 바로가기

프로그래밍/MSSQL 정리필요

[DB_MSSQL] INDEX 컬럼 (WHERE IDX=1+1 vs WHERE IDX-1=1)

반응형

WHERE IDX = 1+1 vs WHERE IDX-1 = 1



승자는 WHERE IDX = 1+1


인덱스컬럼에 형 변환 및 값 변경이 발생하면, 인덱스를 제대로 타지 않을 수 있다.

즉, IDX-1과 같은 값 변경이 발생하면 인덱스를 안타게 될 수 있다!





  예제



SEQ 컬럼을 PK로 설정한 테이블 TABLE1이 있다.


SELECT * FROM TABLE1 WHERE SEQ = 4999 + 1

위의 쿼리문을 실행해보자

실행 계획을 살펴보면 다음과 같이 Clustered Index Seek 즉 인덱스를 잘 타고있다는것을 확인할 수 있다.





그러나,


SELECT * FROM 테이블명 WHERE SEQ-1 = 4999

위의 쿼리처럼 인덱스컬럼에 값 변화를 주고 실행해보자
실행 계획을 살펴보면 Seek이 아닌 Scan이 일어나고 있다. 비효율적이다!




반응형