인덱스

유경우·2024년 4월 8일
0

CS

목록 보기
21/21
post-custom-banner

인덱스란?

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

인덱스는 데이터베이스 내의 특정 컬럼(열)이나 컬럼들의 조합에 대한 값과 해당 값이 저장된 레코드(행)의 위치를 매핑하여 데이터베이스 쿼리의 성능을 최적화하는 데 중요한 역할을 한다.

예를 들어, 책에서 원하는 내용을 찾는다고 가정하면, 책의 모든 페이지를 넘기면서 원하는 내용이 나올 때까지 찾는 것보다 목차 또는 저자가 남긴 색인(index)을 통해 찾는 것이 더욱 빠를 것이다. 데이터베이스의 인덱스가 책의 목차와 색인과 같은 역할을 한다.

이처럼 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 전체 테이블을 스캔하는 것이 아니라, 인덱스를 사용하여 검색 대상 레코드의 범위를 줄일 수 있다. 이는 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시킨다.

인덱스의 종류

인덱스는 여러 자료구조를 이용해서 구현하 수 있는데, 대표적인 자료구조로 해시 테이블과 B+Tree가 있다.

해시 테이블 구조

  • 특징: (key, value)의 한 쌍으로 데이터와 그 물리적 주소를 저장하는 자료구조입니다.
  • 한계: 해시 테이블은 등호(=) 연산에는 최적화되어 있지만, 부등호(<, >) 연산에는 적합하지 않습니다. 데이터가 정렬되어 있지 않아, 특정 기준보다 크거나 작은 값을 빠르게 찾는 것이 어렵습니다.

B+Tree 구조

  • 구조: Root Node, Branch Node, Leaf Node로 구성된 계층적 구조를 가지고 있으며, 대부분의 DBMS에서 널리 사용됩니다.
  • 장점:
    1. 계층적 구조: 데이터 접근 경로가 명확하게 정의되어 있어, 효율적인 데이터 검색이 가능합니다.
    2. 데이터 저장: Leaf Node에서만 데이터(Key와 Value)를 저장합니다.
    3. Leaf Node 연결: Leaf Node들이 LinkedList로 연결되어 있어, 순차적인 데이터 접근이 용이합니다.
    4. 효율적인 검색: Root Node에서 시작하여 적절한 Branch Node를 거쳐 Leaf Node에 도달함으로써, 원하는 데이터를 효율적으로 찾을 수 있습니다.

장단점

  • 장점:
    검색과 정렬 속도 향상: 데이터가 정렬되어 있어 빠르게 원하는 데이터를 찾아낼 수 있습니다.
    조건 검색 효율성: Where절을 사용할 때 데이터를 빠르게 찾을 수 있습니다.
    정렬 정의 효율성: Order by에 의한 정렬 과정이 필요 없어 처리 속도가 빨라집니다.
    MIN, MAX 처리의 효율성: 데이터가 정렬되어 있어 빠르게 최소, 최대값을 찾을 수 있습니다.
    테이블 행의 고유성 강화: 데이터의 중복을 방지하여 데이터의 일관성을 유지합니다.
    시스템 부하 감소: 전반적인 데이터베이스 시스템의 효율성을 향상시킵니다.

  • 단점:
    유지 관리 부하: 데이터 변경 작업(INSERT, UPDATE, DELETE)이 발생할 때마다 인덱스를 재정렬해야 합니다.
    스토리지 비용: 인덱스를 유지 관리하기 위해 추가적인 저장 공간이 필요합니다.
    인덱스 스캔의 한계: 모든 경우에 인덱스 스캔이 효율적인 것은 아닙니다. 데이터 양에 따라 풀 스캔이 더 빠를 수 있습니다.
    과도한 인덱스 사용의 부작용: 인덱스를 너무 많이 사용하면 하나의 쿼리는 빨라질 수 있지만, 전체 데이터베이스 성능에 부정적인 영향을 줄 수 있습니다.

출처 : https://ittrue.tistory.com/331,
https://velog.io/@alicesykim95/DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4Index%EB%9E%80

profile
개발자
post-custom-banner

0개의 댓글