인덱스란?

0taetae·2024년 12월 31일
post-thumbnail

📙인덱스란?

검색 속도 향상을 목적으로 만드는 하나 이상의 테이블 필드에 대한 자료구조

💡인덱스 사용시, 고려할 점

  • 인덱스의 저장 공간과 생성 시간
    • 새로운 데이터를 삽입하거나 기존 데이터를 수정/삭제할 때 인덱스에 대한 작업도 동시에 이루어져야 하기 때문에 인덱스를 유지하고 갱신하는 추가적이 자원과 연산이 필요하다.
  • 테이블당 인덱스의 개수가 지나치게 많은 것은 지양한다.
    • 중복되는 데이터가 많은 필드에 대해 인덱스를 생성하는 것은 그렇지 않은 필드에 대해 인덱스를 생성하는 것에 비해 인덱스의 성능을 떨어뜨린다.

💡인덱스를 사용할 테이블

  • 데이터가 충분히 많은 테이블
  • 조회가 빈번히 이루어지는 테이블

📙인덱스의 종류

💡클러스터형 인덱스

  • 테이블당 하나씩 만들 수 있는 인덱스
  • 테이블 내에 기본키로 지정된 필드는 기본적으로 클러스터형 인덱스로 간주된다.
  • 기본 키로 지정된 필드가 없는 경우에는 NOT NULL 제약 조건과 UNIQUE 제약 조건이 있는 필드를 클러스터형 인덱스로 간주한다.

💡세컨더리 인덱스(논클러스터형 인덱스)

  • 테이블당 여러 개가 존재할 수 있지만, 클러스터형 인덱스를 활용한 검색보다 일반적으로 느리다.
CREATE INDEX 인덱스_이름 ON 테이블_이름 (필드);

SHOW INDEX FROM 테이블_이름;

DROP INDEX 인덱스_이름 FROM 테이블_이름;

📙인덱스로 사용되는 자료구조

💡해시 테이블

  • 키와 값을 저장하는 자료구조
  • 해시 함수를 사용해 키를 인덱스로 변환하여 데이터를 저장하고 조회한다.
  • O(1)의 시간복잡도로 빠른 데이터 조회가 가능하다.
  • 서로 다른 키가 같은 해시값을 가질 수 있기 때문에 충돌 처리가 필요하다.

💡B 트리

  • 각 노드에는 키로써 인덱스 값이 포함되어 있고, 인덱스 값을 탐색하면 실제 데이터(레코드)가 저장된 위치를 알 수 있다.
  • B 트리의 특성상 다량의 노드에 대한 빠른 검색이 가능하기 때문에 인덱스를 바탕으로 레코드가 저장된 위치를 빠르게 알 수 있다.

0개의 댓글