[Oracle] 인덱스란 무엇인가?
인덱스란?
- 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
- 데이터를 빨리 찾을 수 있게 돕는다.
인덱스 쉽게 이해하기 : 책에서 주제 찾기
1. 특정 주제를 정확히 알고 찾는 방법
- 1.1 목차에서 특정 주제를 포함하는 주제를 찾는다(제목 등)
- 1.2 목차에 적혀 있는 페이지를 확인한다.
- 1.3 페이지에 해당하는 부분 찾아가기
- 1.4 원하는 주제를 읽으면서 찾기
2. 전체책에서 주제를 찾기
- 1.1 책 1페이지 펴기
- 1.2 1페이지부터 끝페이지까지 다 읽기
여기서 특정 주제만 찾는 경우에는 1번 특정 주제 찾기가 효율적이다.
인덱스 조회 vs 테이블 전체 조회
아래 처럼 적용해서 이해하면 좋을거 같다.
- 인덱스를 사용한 조회 = 1.특정 주제를 정확히 알고 찾는 방법
- 테이블 전체 스캔(FULL scan)= 2.전체 주제 찾기
2. 인덱스 탐색법 이해하기
- 위 처럼 특정 내용을 검색하기 위해서는 목차 같은 리스트가 잘 정리 되어 있어야한다.
- 데이터 베이스 인덱스도 위와 같이 잘 정리된 구조로 생각된다.
예제1. 아래 그림에서 다음 조건을 찾아보자. 성 : 김 이름 : 하마, 지역 : 부산
처음부터 끝까지 다 찾아야한다. 이것은 테이블 풀스캔하여 검색조건에 대하여 필터링과 비슷하다.
FULL SCAN처럼 전체 테이블을 읽어야한다
예제2. 아래 그림에서 다음 조건을 찾아보자. 성 : 김 이름 : 하마, 지역 : 부산
위 예시는 성으로 정렬이 되어 있다. 그래서 김으로 된 부분만 찾아보면 된다. 예제1번보다 빨리 찾을 수 있다.
INDEX : 성 성으로 되어진 인덱스 스캔 방식
예제3. 아래 그림에서 다음 조건을 찾아보자. 성 : 김 이름 : 하마, 지역 : 부산
<
위 예시는 성, 이름, 지역으로 정렬이 되어 있다. 그래서 한건을 바로 찾을 수 있. 예제2번보다 빨리 찾을 수 있다.
INDEX : 성+ 이름 +지역으로 구성된 인덱스 사용
정리
- 예제를 살펴보면 잘 정렬 된 값들에서는 특정 값을 찾는것은 수월했다. 데이터가 많아져도 테이블에 인덱스를 잘 활용하면 빠를 속도를 확인 할 수 있다.
- 인덱스는 잘 정렬 된 데이터구조이다. (다음 포스트주제 : 인덱스 자료구조에 대해서 작성해봐야겠다.)
- 인덱스는 과연 항상 빠를까 ? (다음 포스트 주제)