다음 중 아래 SQL과 인덱스 구성에 대한 설명으로 가장 부적절한 것을 2개 고르시오.
------------------------------------- 아 래 ---------------------------------------
SELECT ………………
FROM TAB1
WHERE COL1 = :VAL1
AND COL2 LIKE :VAL2 || '%'
AND COL3 IN ('1','5')
AND COL4 BETWEEN :DATE1 AND :DATE2
■ 인덱스구성 : COL1 + COL2 + COL3
------------------------------------------------------------------------------------------
① COL1 조건이 없었다면 정상적으로 인덱스를 이용할 수 없다.
② COL2 조건은 인덱스 읽는 범위를 줄여주는데 기여하지 못한다.
③ COL3 조건은 인덱스 읽는 범위를 줄여주는데 기여한다.
④ COL4 조건은 테이블에서 필터링된다.
* 정답 및 해설 *
정답 : ② , ③
Like, Between, 부등호 같은 범위검색조건이더라도 선행 칼럼이 누락없이 모두 ‘=’ 조건으로 제공되면 인덱스 스캔 범위를 줄이는데 기여한다.
해설:
① COL1이 인덱스의 선두컬럼이기 때문에, COL1이 있어야 인덱스를 이용할 수 있으므로 적절
② index 구성에서 COL2 LIKE :VAL2 || '%'는 비록 index의 범위를 줄일 수는 있으나 range 범위에 대한 비효율이 발생
③ COL3 IN ('1','5')은 col2를 like로 검색하였음으로 인하여 index의 filter역할만을 하게 됨
④ COL4는 인덱스에 포함되어 않아서, 테이블에서 필터링 해야하므로 적절
[출처] http://www.dbguide.net/da.db?cmd=snb9_4_view&boardUid=165328&boardConfigUid=81
[참고] 해설은 원문에서 사람들이 댓글로 단 것 중에 타당하다고 생각되는 내용을 모아 놓은 것입니다.