[Database] Index

dustle·2024년 7월 31일
0

인덱스는 데이터베이스에서의 검색 속도를 향상시켜줍니다.

트리구조로 되어있으며 정렬되어있기 때문에 테이블 전체를 풀 스캔 할 필요없이 인덱스를 통해 원하는 데이터에 접근 가능합니다.

인덱스의 특징과 장단점

인덱스를 많이 설정하게 된다면 속도 향상 대비 업데이트 성능이 떨어지며 CUD 성능에 영향을 주게 됩니다.

  • 메모리 영역에 트리 구조로 저장합니다.
  • 디스크 저장소에 바로 접근하는 대신 메모리 저장소에 있는 인덱스를 먼저 조회합니다.
  • 빠른 데이터 조회가 가능합니다.
  • 메모리를 소모하고 인덱스가 걸린 칼럼은 CUD 성능이 떨어지는 단점이 있습니다.

인덱스의 설정 기준

카디널리티가 높은 칼럼을 기준으로 설정합니다.

카디널리티란 중복도로 중복도가 낮으면 카디널리티가 “높다” 라고 표현합니다.

예시로는 주민번호, id 등이 있습니다.

인덱스에서 사용하는 자료구조

  • 해시
    • key, value 형태로 저장
    • O(1)의 복잡도로 빠르게 데이터 찾기 가능
    • 등호 연산에서는 유리하지만 부등호 연산에서는 불리
  • B- Tree
    • 트리는 정렬되어 있어 분할정복방식으로 O(logN)의 시간 복잡도로 트리 내에서 데이터 찾기 가능
    • 한쪽으로 편향된 트리는 O(N)까지 시간 복잡도 떨어질 수 있음
    • 페이징을 통해 정렬
  • B+ Tree
    • B- Tree 의 풀스캔을 방지하기 위해 나온 트리
    • 리프 노드에만 데이터를 저장하고 모든 리프 노드를 Linked List 로 연결
    • 트리의 높이가 낮아져서 검색 속도가 빨라짐

복합 인덱스

인덱스는 단일 칼럼에만 적용되는 것이 아니라 여러 칼럼에 걸쳐 적용될 수 있습니다.

B- Tree 구조를 사용합니다.

  • 두 개 이상의 칼럼을 포함하는 인덱스
  • 첫번째 칼럼을 기준으로 정렬한 뒤 두번째 칼럼이 정렬되어 있으므로 인덱스가 생성될 때 칼럼의 순서가 중요

데이터베이스는 인덱스를 사용하여 데이터를 검색할 때 인덱스의 첫 번째 컬럼부터 순차적으로 검색하게 됩니다. (인덱스 컬럼 순서와 조회 순서를 맞춰야 함)

그러므로 조인 연산이나 복합한 쿼리에서 성능 향상이 뛰어납니다.

복합인덱스의 설정 기준

where 절에 있는 칼럼을 기준으로 생성하는 것이 효과적입니다.
쿼리의 필터링 조건에 따라 인덱스를 통한 데이터 검색이 최적화 됩니다.

인덱스 사용 시 주의사항

다중 인덱스를 사용할 때 범위 조건은 인덱스를 타지만 이후 컬럼들은 인덱스를 타지 않습니다.
인덱스로 지정한 컬럼은 그대로 사용해야 합니다. (연산 불가)

0개의 댓글