본문 바로가기
study/OracleTuning

IndexScan이란?

by 고기만두(개발자) 2021. 8. 31. 18:39
728x90
반응형

튜닝을 하다보니 Index라는 말이 자주 보이는데, 이게 대체 뭘까 해서 그 다음 주제는 자연스럽게 index가 되었어요.

Index는 검색성능을 최적화하기 위해 사용되는 도구입니다.

책의 목차와 같은 역할을 합니다.

 

애시당초에 쿼리를 짜면서 필요한 경우 인덱스를 추가할 수 있고, 학부 시절 SQL 배우던 데이터베이스 시간에 인덱스 추가하는 방법을 배운 적이 있었어요.

근데 Oracle의 경우 따로 인덱스를 추가하지 않아도 테이블 생성단계에서 다음 2가지 경우에서 인덱스를 자동으로 생성합니다.

1. PK 조건을 거는 경우

2. Unique 조건을 거는 경우

인덱스가 적절히 걸리는 경우, 검색속도가 향상됩니다.

하지만 꼭 모든 경우에서 인덱스가 필요할까요? 아닙니다.

Insert, delete같은 DML 을 수행할 때는 테이블과 함께 인덱스를 수정해야 하는데, 이게 품이 많이 드는 일이라 불리해요.

그리고, 우리가 실제로 살면서 일하면서 어떤 문서를 읽을 때 A4 1~2페이지 짧은 문서에는 인덱스를 붙이느니 눈으로 직접 전체를 훑어보는게 효율이 높을 거 아니에요?

그래서 인덱스 생성만이 튜닝의 만능 치트키라 부를 수 없긴 해요.

인덱스의 유불리 상황을 다음과 같이 나누어봤습니다.

인덱스는 보통 트리 구조를 이룹니다. 이를 B*Tree 구조라고 부릅니다.

이는 일치, 범위검색 모두에서 강점을 보입니다.

인덱스의 트리 구조

인덱스의 구조에 대한 원론적인 설명을 하면 또 옆으로 새 버릴 것 같고 재미도 없어요.

그래서 이번 포스팅은 인덱스가 걸려 있을 때 데이터를 스캔하는 방식들에 대한 실제적인 설명에 초점을 맞출까해요.

이미지-설명-실행계획 순으로 총 6가지 스캔방식에 대해 소개해볼까 합니다.

도식화된 자료를 통해 설명을 해볼까 해요.

 

(세모의 왼쪽이 앞, 오른쪽이 뒤라고 임의로 약속할게요)

 

인덱스 스캔의 가장 일반적인 방법은 Index Range Scan입니다.
index range scan인데 내림차순인 경우에는 index range scan desc
index full scan은 인덱스의 처음부터 끝까지 쭉 탐색합니다.
sal>5000 조건에 해당하는 행이 얼마 안 됐던가봅니다. 이럴때 걸려요 주로.
index fast full scan은 트리구조를 무시하고 빠르게 병렬수행하는 특징이 있네요. 대신 인덱스에 포함된 칼럼에만 가능하다는!

 

index unique scan은 조건이 = 로 걸리는 경우. 특정 값 하나를 찾을 때 사용합니다.
index skip scan 은 참 특이하게 점프를 뛰면서 스캔을 하네요.

 

INDEX RANGE SCAN

INDEX RANGE SCAN DESC

INDEX FULL SCAN

INDEX FAST-FULL SCAN

INDEX UNIQUE SCAN

INDEX SKIP SCAN

총 6가지 대표적인 스캔의 종류에 대해 정리해보았습니다.

스캔방식 변경이 만능이 될 수는 없겠지만, 옵티마이저의 실행계획을 이해할 수 있다면, 그리고 조정이 가능한 경우 힌트를 통해서 스캔을 적절히 변경해주면 성능향상에 도움이 될 수 있을 것이라고 생각해요.

728x90
반응형

'study > OracleTuning' 카테고리의 다른 글

SQL 튜닝과 Table Access  (0) 2021.09.01
SQL 튜닝에 꼭 필요한 옵티마이저와 실행계획  (0) 2021.08.30

댓글