반응형
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이 일어나고 있다. 비효율적이다!
반응형
'프로그래밍 > MSSQL 정리필요' 카테고리의 다른 글
[DB_MSSQL] sp_addextendedproperty 주석 (테이블/컬럼) (0) | 2017.02.22 |
---|---|
[MSSQL 연습] 오름차순으로 정렬하되, 같은 이름은 묶기 (0) | 2017.02.21 |
[DB_MSSQL] 프로시저 실행 결과 테이블에 입력 (0) | 2017.02.14 |
[DB_MSSQL] return, break, goto (0) | 2017.02.14 |
[DB_MSSQL] WHERE LIKE '%Parameter%' (LIKE절에 파라미터 사용) (0) | 2017.02.14 |