데이터베이스에서 인덱스의 역할

SeongGyun Hong·2025년 2월 20일

SQL

목록 보기
41/51

1. DB와 DBMS의 차이

1.1 DB(DataBase)

데이터 베이스는 단순히 데이터의 집합 그 자체를 의미한다.
예를 들면, 학생 성적 정보, 은행 거래 내역 등등 실제 데이터들이 모여만 있으면 그게 Data Base가 되는 것

1.2 DBMS(DataBase Management System)

DBMS란 위와 같은 DB들을 관리하고 운영하는 소프트웨어를 의미한다.
대표적으로 아래 DBMS가 있다.

  • MySQL
  • Oracle
  • PostgreSQL
  • MS SQL Server

1.3 DBMS가 왜 필요한가요?

다음과 같은 기능을 그냥 원시상태에서 존재하는 DB에는 쉽게 적용할 수 없기 떄문

  • 데이터 저장, 수정, 삭제
  • 데이터 검색
  • 보안 관리
  • 백업 및 복구
  • 트랜잭션 관리
  • 다중 사용자 지원

위와 같은 사항들을 쉽게 만들어주기 위해 DBMS가 존재한다.

2. DBMS에서 Index란?

Index란 도서관의 책 찾기와 비슷하다.
도서관에서 책을 찾을 때 색인을 보고 빠르게 찾듯이, 데이터베이스도 인덱스를 통하여 원하는 데이터를 빠르게 찾을 수 있다.
즉, 인덱스란 데이터를 빠르게 검색하기 위한 특별한 데이터 구조를 의미하는 것이며, 특정 칼럼에 대한 검색을 최적화 해주는 역할을 한다.

인덱스는 다양한 DBMS에서 다음과 같은 구조로 구현되어 있다.

  • B-Tree
  • Hash Tree

2.1 예시

Customers 테이블이 있다는 가정 하에 이 테이블에 customer_id name email 같은 칼럼이 있다고 하면, 다음과 같이 인덱스를 만들면

CREATE INDEX idx_customer_id ON Customers(customer_id);

customer_id로 검색할 때 엄청난 속도 향상을 경험할 수 있다.
인덱스가 없다면 테이블 전체를 살펴야하지만, 인덱스가 있는 경우에는 바로 찾을 수 있기 때문!

2.2 B-Tree 구조 이해하기

도서관 책장처럼 계층적으로 정리되어 있는 구조이다.

루트
├── 노드1 (1-100)
│   ├── 1-30
│   ├── 31-60
│   └── 61-100
├── 노드2 (101-200)
└── 노드3 (201-300)

B-Tree는 Balanced Tree의 약자로, B-Tree의 경우에 데이터를 BETWEEN, >, < 등의 범위 검색에 용이하도록 인덱싱해주기에 Hash 인덱스보다 유용하게 사용된다.

Hash Index의 경우에는 오직 정확한 값 검색에만 최적화 되어 있지만, B-Tree의 경우 다양한 쿼리 패턴에 대응 가능하다.

Hash란?
임의의 길이의 입력 데이터를 고정된 길이의 값(해시 값)으로 변환하는 알고리즘
저장 위치를 빠르고 정확하게 찾는 것에는 좋으나, 범위 검색 이나 정렬이 불가능하며 해시 충돌로 인하여 성능 저하가 일어날 수도 있다

해시충돌이란?
무한한 입력값을 고정된 유한한 크기의 출력으로 변환하는 바, 일부는 같은 슬롯을 공유해야 한다... 기본적으로 해시 함수의 출력 범위가 제한되어 있기에 발생하는 충돌임.

2.3 Selectivity 이해하기

선택도라고 함은 칼럼이 얼마나 다양한 값을 가지고 있는지를 나타낸다.

  • 높은 선택도 예시
    • 주민등록번호
    • 이메일 주소
    • 계좌번호
  • 낮은 선택도 예시
    • 성별
    • 결혼여부
    • 혈액형

쿼리를 최적화 하고 싶을 때 어느 칼럼에 인덱스를 생성해줘야 하는가?

  • 선택도가 높은 칼럼에 인덱스를 설정해야 한다.
  • 선택도가 낮으면 인덱스 효율성이 떨어지기 때문. 인덱스 유지비용이 더 많이 나올 수도 있음

3. 인덱스 유지비용

인덱스 유지비용이란, 테이블의 데이터가 변경될 때 마다 인덱스 구조 또한 같이 업데이트 되어야 하는 오버헤드를 말한다.

오버헤드란?
주된 작업 외에 추가로 발생하는 시간, 메모리, 연산 등의 부가 비용을 의미한다.

구체적인 예시를 들자면 아래와 같아

  • 데이터 삽입, 삭제, 수정하는 경우 업데이트 비용
    테이블에 새로운 레코드가 추가되거나, 기존 레코드가 변경 삭제 되는 때에 인덱스도 그에 맞추어 추가, 삭제, 변경 되는 작업이 필요한 바, 이 작업들이 별도의 연산 비용을 발생시킨다.

  • 추가 저장 공간
    인덱스는 별도의 자료구조로 저장되기에, 데이터베이스 전체 크기가 증가하게 된다.

즉, 인덱스 유지비용인 든다는 것은 데이터 변경 작업을 함에 있어서 추가적인 부하와 저장 공간을 요하게 될 것이라는 의미이다.

profile
헤매는 만큼 자기 땅이다.

0개의 댓글