[CS - db] 인덱스(Index)

Jo HangJoon·2022년 10월 20일
0

CS 공부

목록 보기
17/17

질문의 핵심

  • 인덱스란?
  • 인덱스를 쓰는 이유?

1. 인덱스(Index)

인덱스(Index)란?

데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다.

특정 column에서 인덱스를 생성하면, 해당 column의 데이터들을 정렬하여 별도의 메모리 공간에 데이터 물리적 주소와 함께 저장된다.

인덱스의 장점

인덱스의 가장 큰 장점은 데이터가 오름차순으로 정렬되어 있다는 것이다.

1. 조건 검색 WHERE 절의 효율성

기존 테이블과 달리 인덱스 테이블은 정렬되어 저장되어 있기 때문에 해당 조건(WHERE)에 맞는 데이터들을 빠르게 찾아낼 수 있다.

2. 정렬 ORDER BY 절의 효율성

부하가 굉장히 많이 걸리는 작업인 ORDER BY 정렬 과정을 피할 수 있다.

3. MIN, MAX의 효율적인 처리

인덱스 테이블이 정렬되어 있기 때문에 시작 값과 끝 값만 가져오면 된다.

인덱스의 단점

인덱스의 가장 큰 단점은 데이터의 정렬된 상태를 계속 유지시켜줘야 한다는 점이다.

1. DML에 취약

삽입/갱신/삭제를 통해 데이터가 추가되거나 바뀐다면 인덱스 테이블 내의 값들을 다시 정렬해야 한다.

2. 무조건 인덱스 스캔이 좋은 것은 아니다.

인덱스는 테이블의 전체 데이터 중 10~15% 이하의 데이터를 처리하는 경우에만 효율적이다.

3. 속도 향상을 위해 인덱스를 많이 만드는 것은 좋지 않다.

인덱스를 관리하기 위해 데이터베이스의 약 10%에 해당하는 주소공간이 필요하다. 무턱대고 인덱스를 많이 만들면 데이터베이스의 성능 부하를 초래한다.

다음과 같은 경우 인덱스를 사용하기 좋다.

  • 규모가 작지 않은 테이블
  • 삽입/갱신/삭제가 자주 발생하지 않는 경우
  • JOIN이나 WHERE/ORDER BY에 자주 사용되는 경우
  • 데이터의 중복도가 낮은 경우

인덱스의 구조

인덱스를 구현하기 위해서는 다양한 자료구조를 사용할 수 있는데, 가장 대표적인 예시로는 해시 테이블과 B+Tree가 있다.

해시 테이블

key-value 한 쌍으로 데이터를 저장하는 자료구조.

B+Tree

리프 노드에만 데이터를 저장하고 리프 노드가 아닌 노드에서는 자식 포인터만 저장하는 자료구조.

리프 노드끼리는 연결 리스트로 연결되어있다. B+Tree에서는 반드시 리프 노드에만 데이터가 저장되기 때문에 중간 노드에서 key를 올바르게 찾아가기 위해서 key가 중복될 수 있다. 


참조

0개의 댓글