본문 바로가기

Oracle/Tunning

[Oracle] 부분 범위 처리에 따른 INDEX FULL SCAN 성능

728x90

Index Full Scan은 인덱스 리프 블록을 처음부터 끝까지 모두 스캔하는 방식이며, 인덱스 선두 컬럼이 조건절에 없을 때 사용된다.

 

인덱스 선두 컬럼이 조건절에 없으면 Index Range Scan이 불가능하므로 테이블을 Full Scan해애 하는데, 컬럼이 많은 큰 테이블을 스캔하려면 블록 I/O가 많이 발생하므로 성능이 느리다. 그럴 때 컬럼이 적은 인덱스를 스캔하면 I/O 발생량을 줄일 수 있다. 단, 인덱스 필터 조건을 만족하는 데이터가 적어야 한다. ( 그래야지 테이블 ACCESS가 적으므로) 필터 조건을 만족하는 데이터가 많으면 테이블 랜덤 엑세스도 그만큼 많이 발생하므로 테이블 전체 스캔보다 성능이 훨씬 더 느려진다.(랜덤 엑세스는 sigle block I/O, table full scan은 multi block I/O). 

 

하지만, 필터 조건을 만족하는 데이터가 많더라도 결과집합 중 앞쪽 일부만 스캔하고 멈춘다면, 즉 부분 범위 처리가 가능하다면 Index Full Scan이 효과적일 수 있다. 인덱스 앞쪽에서 조건을 만족하는 데이터를 빨리 찾을 수 있기 때문이다.

 

728x90
반응형

'Oracle > Tunning' 카테고리의 다른 글

[Oracle] Tunning 관련 파라미터 정리  (0) 2024.08.12
[Oracle]OR-Expansion  (0) 2024.08.12
[Oracle] Fetch Call 최소화  (0) 2024.08.02
[Oracle] NL Join 확장 메커니즘  (0) 2024.03.22
[Oracle] sort group by, hash group by 차이  (2) 2024.02.28