Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 너비우선탐색
- 데이터베이스
- 브루트포스 알고리즘
- BFS
- 너비 우선 탐색
- 그래프 탐색
- 완전탐색
- Python
- SW Expert Academy
- javascript
- oracle
- 백준알고리즘
- 자바스크립트
- 스택
- 문자열
- 프로그래머스
- SWEA
- 다익스트라
- 그래프 이론
- 깊이우선탐색
- 다이나믹 프로그래밍
- DP
- 백트래킹
- 구현
- 백준 알고리즘
- 파이썬
- 오라클
- 그리디 알고리즘
- 브루트포스
- DFS
Archives
- Today
- Total
민규의 흔적
[오라클 DB] 다단계 인덱스 본문
다단계 인덱스
인덱스 자체가 클 경우에는 인덱스를 탐색하는 시간조차 오래 걸릴 수 있다. ( 데이터 파일에 대한 인덱스 파일이 여타 다른 데이터 파일만큼 큰 경우 )
이러한 경우 인덱스 엔트리를 탐색하는 시간을 줄이기 위해 단일 단계 인덱스를 디스크 상의 하나의 순서 파일로 간주하고, 단일 단계 인덱스에 대해 다시 인덱스를 정의할 수 있다.
다단계 인덱스는 가장 상위 단계의 모든 인덱스 엔트리들이 한 블록에 들어갈 수 있을 때까지 이런 과정을 반복하며, 최종 과정을 거쳐 가장 상위 단계의 인덱스가 만들어지면 해당 인덱스를 마스터 인덱스(Master Index)라고 부른다.
마스터 인덱스는 한 블록으로 이루어지기 때문에 주기억 장치에 상주할 수 있다.
대부분의 다단계 인덱스는 B+트리를 사용한다.
위 예시에서 볼 수 있듯, 데이터 파일에 대한 인덱스 파일 또한 여타 다른 데이터 파일처럼 무수히 클 경우, 해당 인덱스 파일에 대한 또 다른 인덱스 파일을 계속 생성하여 한 블록 내에 모든 인덱스 엔트리가 들어갈 수 있을 때까지 인덱스 파일을 생성한다.
다단계 인덱스 성능 예시
가정
파일에 레코드가 10,000,000개 있고, 각 레코드의 길이가 200바이트이고, 블록 크기가 4,096 바이트이면 블록킹 인수는 ⌊ 4,096 / 200 ⌋ = 20인 파일을 가정해보자.
이 가정 값들은 이전 포스팅 글의 히프 파일 성능 예시 ~ 보조 인덱스 성능 예시의 값들과 같다.
- 1단계 인덱스의 블록 수는 2,942
- 2단계 인덱스의 블록 수는 ⌈ 2,942 / 170 ⌉ = 18
- 3단계 인덱스의 블록 수는 ⌈ 18 / 170 ⌉ = 1 -> 주기억 장치에 상주할 수 있음
원하는 레코드를 탐색할 때, 3단계 인덱스는 주기억 장치에 상주하므로 디스크 접근이 필요 없고, 2단계 인덱스를 구성하는 18개 블록 중에서 한 블록, 2,942개의 1단계 인덱스 블록 중에서 한 블록, 데이터 파일의 500,000개의 블록 중에서 한 블록 등 총 3번의 디스크 접근만 하면 된다.
따라서 탐색 시간은 3 X 10ms = 30ms이다.
기본 인덱스를 단일 단계 인덱스로 구성한 경우의 130ms와 비교하면 인덱스를 탐색하는 시간이 1/4.3 정도밖에 안 걸린다.
'데이터베이스' 카테고리의 다른 글
[오라클 DB] 인덱스 선정 지침과 데이터베이스 튜닝 (2) | 2023.11.20 |
---|---|
[오라클 DB] SQL의 인덱스 정의문, 인덱스의 장점과 단점 (0) | 2023.11.20 |
[오라클 DB] 파일 조직 - 인덱스된 순차 파일, 단일 단계 인덱스 (2) | 2023.11.14 |
[오라클 DB] 파일 조직 - 히프 파일, 순차 파일 (2) | 2023.11.14 |
[오라클 DB] 릴레이션 분해와 정규형(Normal Form) (2) | 2023.11.01 |