블로그 이름

[Oracle] 인덱스가 걸려있는데 FULL SCAN 하는 이유 본문

개발/Database

[Oracle] 인덱스가 걸려있는데 FULL SCAN 하는 이유

Hide 2024. 9. 5. 20:04

A 테이블에 인덱스를 걸어놨는데 실행계획을 살펴보니 

A테이블을 사용한 뷰 에서 조회할때는 RANGE SCAN을 하는데
A테이블에서 조회할때는 인덱스를 타지 않고 FULL SCAN 하는 현상이 있어 원인을 찾아봤다

 

인덱스가 많은 행을 반환한다면, 옵티마이저가 전체 테이블 스캔이 더 효율적이라고 판단할 수 있다고 한다.

 

뷰에서 A테이블을 조회할 때, 뷰에 적용된 조건절이 인덱스에 적합하게 설계되어 있다면 옵티마이저가 인덱스를 사용할 수 있다고 한다.

 

하지만 테이블을 직접 조회할 때는 조건절이 달라 인덱스를 타지 못할수도 있다고 한다.

 

그래서 A테이블을 조회할때 VIEW 테이블과 같이 WHERE절 조건을 바꿔줬더니 A테이블 조회할때도 인덱스를 탄다

 

예상가는 원인으로는

A테이블을 조회할때 인덱스를 안타고 FULLSCAN 돌았을 때는 WHERE절에 INDEX를 타나 FULLSCAN을 하나 결과가 다르지 않은 조건을 줬고,

RANGESCAN 돌때는 결과 행이 적게 나오는 조건을 줬다