DB 인덱싱(Database Indexing)

2024. 11. 10. 21:33·이론공부
목차
  1. 1. 인덱스의 개념
  2. 2. 인덱스의 작동 방식
  3. 3. 인덱스 사용의 장점
  4. 4. 인덱스의 단점
  5. 5. 인덱스의 사용 예
  6. 6. 인덱스의 종류
  7. 7. 인덱스 자료구조 종류

DB 인덱싱(Database Indexing)은 데이터베이스에서 데이터를 더 빠르게 검색하기 위해 사용하는 기술

데이터베이스에서 대량의 데이터를 검색할 때, 인덱스를 사용하면 특정 데이터를 빠르게 찾아낼 수 있어 성능을 크게 향상시킬 수 있다.

1. 인덱스의 개념

  • 책의 목차와 유사하게, 인덱스는 데이터베이스 테이블의 특정 열(column)에 대한 검색용 정보를 미리 저장해둔 자료 구조
  • 인덱스를 사용하면 테이블의 모든 행을 하나씩 탐색하지 않아도 되므로, 검색 속도가 크게 향상된다.

2. 인덱스의 작동 방식

  • 인덱스는 일반적으로 'B-트리(Balanced Tree)'나 '해시(Hash)'와 같은 자료 구조로 저장
  • 인덱스는 특정 열의 값을 기준으로 정렬하여 저장하므로, 데이터 검색 시 이진 탐색(Binary Search) 등의 고속 탐색 알고리즘을 사용할 수 있다.

3. 인덱스 사용의 장점

  • 검색 속도 향상: 특정 조건으로 데이터를 검색할 때 성능을 크게 향상, 특히, 대용량 데이터를 다루는 경우 성능 차이가 크다.
  • 정렬 속도 향상: ORDER BY와 같은 정렬 작업에서도 인덱스를 사용하면 정렬 속도가 빨라진다.
  • 중복 제거: DISTINCT를 사용할 때도 인덱스를 통해 중복 제거를 효율적으로 수행할 수 있다.

4. 인덱스의 단점

  • 저장 공간 사용 증가: 인덱스를 생성하면 추가적인 저장 공간이 필요하다.
  • 데이터 수정 시 성능 저하: 데이터를 삽입, 수정, 삭제할 때마다 인덱스도 갱신해야 하므로, 쓰기 작업의 성능이 다소 저하될 수 있다.
  • 불필요한 인덱스는 성능 저하 유발: 필요한 열에만 인덱스를 설정, 너무 많은 인덱스를 추가하면 오히려 성능이 저하될 수 있다.

5. 인덱스의 사용 예

  • '기본 키(Primary Key)'나 '고유 키(Unique Key)'는 자동으로 인덱스가 생성된다.
  • 자주 검색되는 열(예: 사용자 ID, 제품 이름 등)에 인덱스를 추가하여 검색 성능을 개선할 수 있다.
  • WHERE 조건에 자주 사용되거나, JOIN에서 연결되는 열에 인덱스를 걸어두면 좋다.

6. 인덱스의 종류

  • 단일 인덱스(Single Column Index): 하나의 열에만 적용된 인덱스
  • 복합 인덱스(Composite Index): 여러 열을 결합하여 만든 인덱스로, 여러 열을 기준으로 검색할 때 유용
  • 고유 인덱스(Unique Index): 중복 값을 허용하지 않는 인덱스
  • 전체 텍스트 인덱스(Full-Text Index): 텍스트 검색에 최적화된 인덱스
  • 클러스터형 인덱스(Clustered Index): 실제 데이터가 인덱스 순서대로 정렬된 방식(주로 기본 키에 사용)

7. 인덱스 자료구조 종류

1. B-Tree (Balanced Tree) 인덱스

  • 가장 일반적인 인덱스 자료구조로, 정렬된 데이터를 빠르게 검색, 삽입, 삭제할 수 있도록 설계되어 있다.
  • 구조: 트리 형태로, 각 노드에 여러 키가 저장되며, 각 키에 대한 포인터를 가진다.
  • 특징:
    • 데이터가 정렬된 순서대로 저장되며, **범위 조회(range query)**나 정렬된 결과를 얻는 데 유리하다.
    • 균형을 유지하여 삽입 및 삭제 작업의 성능이 일정하다.
  • 사용 예시: 일반적인 SQL 쿼리에서 WHERE, ORDER BY, JOIN 등 다양한 조건을 처리하는 데 많이 사용

2. Hash Index

  • 해시 함수를 사용하여 키를 해시값으로 변환하고, 해당 해시값을 이용해 데이터를 빠르게 찾는다.
  • 구조: 해시 테이블 구조로, 각 레코드는 해시값에 의해 직접적인 주소로 저장된다.
  • 특징:
    • 빠른 **등가 비교(equality search)**에 매우 유효합니다. 예를 들어, =, IN, EXISTS 등의 연산에 강점이 있다.
    • 범위 검색에는 적합하지 않다.
    • 해시값이 일관되지 않기 때문에, 범위 조회는 불가능하거나 비효율적이다.
  • 사용 예시: 고유한 값을 빠르게 검색할 때, 예를 들어 회원 ID와 같은 유니크 키 검색에 유리하다.

3. Bitmap Index

  • **비트맵(Bitmap)**을 사용하여 조건에 맞는 레코드들의 존재 여부를 빠르게 확인한다.
  • 구조: 각 컬럼에 대해 비트맵을 생성하며, 각 비트는 컬럼 값이 특정 조건을 만족하는지 여부를 나타낸다.
  • 특징:
    • 저용량 컬럼에 매우 유효합니다. 예를 들어, 성별(M/F), 상태(활성/비활성) 등의 값이 적은 컬럼에 적합하다.
    • 범위 검색보다는 등가 검색에서 효율적이다.
  • 사용 예시: 상태 컬럼이 적은 값으로 구성된 경우(예: 활성/비활성)에서 범위가 아닌 특정 값들에 대한 검색이 빠르다.

4. Full-Text Index (전체 텍스트 인덱스)

  • 문서 기반의 텍스트 데이터를 효율적으로 검색할 수 있도록 설계된 인덱스이다.
  • 구조: 텍스트 데이터를 분리하여 단어별로 인덱스를 생성하고, 각 단어가 등장한 위치를 기록한다.
  • 특징:
    • 텍스트 데이터에서 특정 단어를 빠르게 찾을 수 있게 도와준다다.
    • LIKE 검색이나 정규 표현식으로 텍스트를 검색할 때 유용하다.
  • 사용 예시: 검색 엔진이나 문서 저장소에서 텍스트 기반 검색에 사용된다.

5. GiST (Generalized Search Tree)

  • 일반화된 검색 트리로, 다양한 종류의 데이터를 효율적으로 검색할 수 있도록 하는 자료구조다.
  • 구조: 트리 형태로, 다양한 형태의 데이터를 지원합니다.
  • 특징:
    • 범위 검색과 다양한 데이터 타입에 대한 효율적인 검색을 지원한다.
    • 공간 데이터, 다양한 속성들을 인덱싱하는 데 유용하다.
  • 사용 예시: 지리 정보나 다차원 데이터(예: 2D/3D 공간 데이터)에서 사용된다.

6. SP-GiST (Space-partitioned Generalized Search Tree)

  • 공간 분할 인덱스로, 공간 데이터를 효율적으로 처리하는 데 사용된다.
  • 구조: 공간 데이터를 여러 영역으로 나누어 저장한다.
  • 특징:
    • 다차원 공간 데이터와 같은 특수한 형태의 데이터에 대해 효율적인 검색을 제공한다.
    • 예를 들어, 지리 정보나 좌표 기반 데이터에 유용하다.
  • 사용 예시: 지도 서비스나 공간적 데이터 처리에서 사용된다.

7. R-Tree

  • 공간 데이터를 위한 트리 기반 인덱스입니다. 주로 다차원 공간에서 데이터를 검색할 때 사용된다.
  • 구조: 공간을 여러 개의 사각형 영역으로 나누어 인덱스를 생성한다.
  • 특징:
    • 2D/3D 공간 데이터에 적합하다.
    • 범위 검색과 근접 검색을 지원한다.
  • 사용 예시: 지리적 정보 시스템(GIS), 지도 서비스 등에서 위치 기반 검색을 할 때 사용된다.

8. Inverted Index (역 인덱스)

  • 텍스트 검색에서 자주 사용되는 자료구조로, 단어와 해당 단어가 등장한 문서의 목록을 매핑한다.
  • 구조: 각 단어를 키로, 그 단어가 등장한 문서의 ID를 값으로 매핑하여 저장한다.
  • 특징:
    • 전체 텍스트 검색을 매우 효율적으로 처리할 수 있다.
    • 주로 검색 엔진에서 사용되며, 자주 등장하는 단어들을 빠르게 찾을 수 있도록 도와준다.
  • 사용 예시: 구글과 같은 검색 엔진에서 웹 페이지를 색인화할 때 사용된다.

9. Trie (트라이)

  • 문자열 검색에서 사용하는 자료구조로, 문자열을 문자 단위로 분리하여 저장한다.
  • 구조: 각 노드가 문자 하나를 저장하며, 경로를 따라가면서 특정 문자열을 찾을 수 있다.
  • 특징:
    • 빠른 문자열 검색에 적합합니다. 예를 들어, 접두어나 접미사 검색에 강력한 성능을 발휘한다.
    • 자동완성이나 사전 검색에 적합합니다.
  • 사용 예시: 검색어 자동완성, 사전 구현 등에 사용된다.

'이론공부' 카테고리의 다른 글

객체지향과 SOLID원칙  (0) 2025.02.06
자료구조 - R트리(R-Tree)  (0) 2024.11.16
기술면접 준비(2)  (1) 2024.09.30
프록시(Proxy)란?  (0) 2024.09.05
기술면접 준비(1)  (1) 2024.09.05
  1. 1. 인덱스의 개념
  2. 2. 인덱스의 작동 방식
  3. 3. 인덱스 사용의 장점
  4. 4. 인덱스의 단점
  5. 5. 인덱스의 사용 예
  6. 6. 인덱스의 종류
  7. 7. 인덱스 자료구조 종류
'이론공부' 카테고리의 다른 글
  • 객체지향과 SOLID원칙
  • 자료구조 - R트리(R-Tree)
  • 기술면접 준비(2)
  • 프록시(Proxy)란?
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 멤버
    Java this
    데이터 타입
    개발로드맵
    java 유클리드 호제법
    java기초
    java super
    프로그래머스 java 기초트레이닝
    java two-pointer
    java 에라토스테네스의 체
    프로그래머스 java 기초 트레이닝
    데이터 크기
    java 세수의합
    java enhance switch
    Java 생성자
    java 메서드
    java
    java arrays.copyofrnage()
    java 제어자
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
DB 인덱싱(Database Indexing)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.