카테고리 없음

데이터베이스 인덱스

JUNGKEUNG 2024. 11. 26. 23:23
반응형

인덱스란?

추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 이다.

 

예를 들어 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아보는 것은 오래 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞, 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.

 

 

 

인덱스의 장점과 단점

  • 장점
    • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
    • 전반적인 시스템의 부하를 줄일 수 있다.

 

 

  • 단점
    • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
    • 인덱스를 관리하기 위해 추가 작업이 필요하다.
    • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

 

 

인덱스를 사용하면 좋은 경우

  • 규모가 작지 않은 테이블
  • Insert, Update, Delete가 자주 발생하지 않은 컬럼
  • Join이나 Where 또는 Order by에 자주 사용되는 컬럼
  • 데이터의 중복도가 낮은 컬럼

 

 

인덱스의 원리

인덱스는 B+Tree로 일반적으로 사용되고 있다. 인덱스 컬럼은 부등호를 이용한 순차 검색 여난이 자주 발생될 수 있다. 이러한 이유는 BTree의 리프노드들을 LinkedList로 연결하여 순차검색을 용이하게 하는 등 BTree를 인덱스에 맞게 최적화하였다. 비록 BTree는 O(log2 n)의 시간복잡도를 갖지만 해시테이블보다 인덱싱에 더욱 적합한 자료구조가 되었다.

 

 

 

인덱스는 언제 사용할까?

  1. 검색이 자주 발생하는 경우
  2. 특정 열에서 자주 정렬하거나 조건을 확인하는 경우
  3. 데이터가 많을 때

 

 

인덱스 스캔의 종류

1. Full Index Scan (전체 인덱스 스캔)

  • 개념
    • 인덱스에 저장된 모든 데이터를 처음부터 끝까지 스캔한다.
  • 언제 사용될까?
    • 특정 조건 없이 전체 데이터를 읽어야 할 때
    • 예) 모든 데이터를 정렬된 순서로 가져올 때
  • 장점
    • 인덱스가 정렬되어 있으므로 테이블 전체를 스캔하는 것보다 빠르다
  • 단점
    • 조건 없이 모든 데이터를  읽으므로 비효율적일 수 있다.

 

2. Index Range Scan (범위 인덱스 스캔)

  • 개념
    • 특정 범위에 해당하는 데이터만 스캔한다.
    • 예) 1월부터 3월까지의 데이터 범위를 정해서 찾는 거
  • 언제 사용될까?
    • WHERE 조건에서 범위 검색이 있는 경우
    • 예) 나이가 20~30인 사람을 찾아라
  • 장점
    • 범위만 스캔하므로 전체 데이터를 스캔하는 것보다 훨씬 효율적이다.
  • 단점
    • 범위가 너무 넓으면 비효율적일 수 있다.

 

3. Index Unique Scan (유니크 인덱스 스캔)

  • 개념
    • 유일한 값(Primary Key 또는 Unique Key)을 검색할 때 사용한다.
    • 예) 주민번호처럼 특정 값을 찾는 경우
  • 언제 사용될까?
    • WHERE 조건에서 Primary Key나 Unique Key로 검색할 때
  • 장점
    • 인덱스에서 특정 값 하나만 찾으므로 가장 빠르다
  • 단점
    • 특정 값이 없으면 아무 결과도 나오지 않는다.

 

4. Index Full Scan (인덱스 전체 스캔)

  • 개념
    • Full Index Scan과 비슷하지만, 순차적으로 인덱스를 읽는 대신 병렬로 읽을 수 있다. 
    • 특정 상황에서 사용되며, 데이터베이스가 더 효율적인 스캔 방식을 선택한다.
  • 언제 사용될까?
    • ORDER BY 같은 작업으로 정렬된 데이터가 필요할 때 사용된다.
  • 장점
    • Full Table Scan보다 빠르다
  • 단점
    • 조건 없는 전체 스캔이므로 많은 데이터를 읽을 수 있다.

 

5. Index Skip Scan (인덱스 스킵 스캔)

  • 개념
    • 일부 열만 사용해 데이터를 스캔한다.
    • 복합 인덱스(Composite Index)가 있을 때 유용하다.
  • 언제 사용될까?
    • 복합 인덱스에서 일부 열만 조건으로 사용될 때
    • 예) 나이가 30인 사람 (복합 인덱스: 성별, 나이)
  • 장점
    • 복합 인덱스를 활용해 불필요한 작업을 줄인다.
  • 단점
    • 단일 조건으로 사용된 인덱스보다 느릴 수 있다.

 

6. Index Fast Full Scan (빠른 전체 인덱스 스캔)

  • 개념
    • 인덱스 전체를 읽지만, 테이블은 읽지 않는다.
    • 인덱스에 필요한 모든 데이터가 있을 때 유용하다.
  • 언제 사용될까?
    • SELECT 절에서 인덱스에 초함된 열만 요청할 때
  • 장점
    • 테이블을 읽지 않으므로 속도가 빠르다
  • 단점
    • 인덱스가 크면 비효율적일 수 있다.

 

 

총 정리

인덱스란? 

- 데이터를 빨리 찾기 위한 자료구조

 

장점

- 검색이 매우 빠르다

- 정렬도 빠르게 처리 가능하다

 

단점

- 추가적인 insert, update, delete 자주 일어나면 느리다.

- 추가 저장 공간이 필요하다

 

언제 사용할까?

- 데이터베이스에서 인덱스를 잘 활용하면 성능을 크게 상승시킬 수 있다. 하지만 모든 경우가 적합한 게 아니기 때문에 적절한 곳에 사용하는 것이 중요하다.

 

 

정리: 스캔 종류 비교

스캔 방식 개념 사용 사례 특징

Full Index Scan 전체 인덱스를 처음부터 끝까지 스캔 조건 없이 전체 데이터를 가져올 때 정렬된 데이터를 가져오는 데 유용
Index Range Scan 특정 범위를 스캔 WHERE 조건에 범위가 있는 경우 범위가 좁을수록 효율적
Index Unique Scan 유일한 값을 스캔 Primary Key 또는 Unique Key로 검색할 때 특정 값을 빠르게 찾음
Index Skip Scan 복합 인덱스에서 일부 열만 스캔 복합 인덱스가 있지만 일부 열만 조건으로 검색할 때 복합 인덱스를 활용
Index Fast Full Scan 인덱스 전체를 빠르게 스캔 SELECT 절에 필요한 데이터가 모두 인덱스에 있을 때 테이블을 읽지 않으므로 빠름
  • Full Index Scan: 색인을 처음부터 끝까지 읽음.
  • Index Range Scan: 특정 범위만 읽음.
  • Index Unique Scan: 딱 하나의 값을 찾음.
  • Index Skip Scan: 복합 인덱스에서 일부 조건만 사용.
  • Index Fast Full Scan: 테이블을 건너뛰고 인덱스만 읽음.