← 질문 목록
#254깊이 0
인덱스 범위 스캔과 전체 스캔 중 무엇을 선택하는가?
데이터의 선택도와 비용 옵티마이저의 판단에 따라 결정한다. 읽어야 할 데이터가 전체의 일정 비율을 넘으면 인덱스보다 전체 스캔이 빠르다.
| 기준 | 인덱스 범위 스캔 | 전체 스캔 |
|---|---|---|
| 접근 방식 | B-Tree 탐색 후 리프 노드 순회 | 데이터 페이지 순차 읽기 |
| 효율성 | 소량 데이터 추출 시 유리 | 대량 데이터 추출 시 유리 |
| I/O 방식 | 랜덤 I/O 발생 | 순차 I/O 발생 |
인덱스만으로 필요한 칸이 다 채워지지 않으면 데이터 페이지를 따로 읽어야 하고 그 자리에서 흩어진 읽기가 생긴다. 읽을 양이 많아지면 이 오버헤드가 순차적으로 읽는 전체 스캔보다 커진다.
옵티마이저는 통계 정보를 바탕으로 비용을 계산한다. 인덱스로 읽어야 할 페이지 수가 전체 페이지 수의 상당 부분을 차지하면 전체 스캔을 선택한다.
통계 정보가 오래되었을 때 엉뚱한 스캔 방식이 선택되어 성능이 급락한다. 이때는 먼저 통계를 새로 모으고 쿼리와 인덱스를 살핀다. 그래도 안 되면 그때 힌트를 본다.
추천 꼬리질문
관련 질문
- 인덱스를 만들었는데 실행 계획에서 타지 않는 이유는?데이터베이스인덱스 범위 스캔과 전체 스캔의 선택 여부는 쿼리 실행 계획에서 인덱스 사용 여부를 결정하는 원리와 직결된다.
- 인덱스를 어느 칸부터 놓아야 하는가?데이터베이스둘 다 인덱스 선택도와 스캔 효율을 다룬다
- 목록을 나눌 때 번호와 커서는 무엇이 다른가?데이터베이스커서 방식이 빠른 이유가 인덱스 범위 스캔이다 — 오프셋은 그만큼을 세며 버린다.
- 인덱스 생성 시 읽기 성능과 쓰기 성능의 트레이드오프는 무엇인가?데이터베이스
- 인덱스 생성 시 조회 성능과 쓰기 성능의 트레이드오프는 무엇인가?데이터베이스