[SQLD 퀴즈] 인덱스

다음 중 아래 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

 

[참고] 해설은 원문에서 사람들이 댓글로 단 것 중에 타당하다고 생각되는 내용을 모아 놓은 것입니다.