MySQL ‐ 인덱스(Index) 기본 개념 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 인덱스(Index)란?

  • 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조를 말한다.
CREATE INDEX idx_age ON users(age); # 나이 필드에 대한 인덱스를 생성한다.

📚 PK는 기본으로 인덱스가 설정된다.

  • PK도 인덱스의 일종이다.
  • 이렇게 원본 데이터 자체가 정렬된 인덱스를 보고 클러스터링 인덱스라고 부른다. 다시 말해 PK는 클러스터링 인덱스라고 할 수 있다.

📚 제약 조건을 추가하면 자동으로 생성되는 UNIQUE 인덱스

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) UNIQUE
);

인덱스 내역 조회 결과

스크린샷 2025-01-27 오후 6 04 53

  • UNIQUE 옵션을 사용하면 인덱스가 같이 생성되기 때문에 조회 성능이 향상된다.
  • 최소한의 인덱스만 사용하도록 하자.
  • 인덱스를 추가하면 조회 성능은 개선되나 쓰기 성능은 느려짐을 항상 기억하자.

📚 멀티 컬럼 인덱스(Multi Column Index)란?

  • 2개 이상의 컬럼을 묶어 설정하는 인덱스를 뜻한다.
CREATE INDEX idx_부서_이름 ON users (부서, 이름);

스크린샷 2025-01-27 오후 6 15 17

📚 멀티 컬럼 인덱스 생성 시 주의할 점

  • 멀티 컬럼 인덱스를 구성할 때 소분류 - 중분류 - 대분류 컬럼 순으로 구성해야 한다.
- 예를 들어, 어느 기업에서 회계 부서의 홍길동을 찾는다고 가정할 때 다음과 같은 두 가지 방식으로 조회할 수 있다.
  - 홍길동을 먼저 찾고 회계 부서를 찾는 방법
  - 회계 부서를 찾고 그 다음 홍길동을 찾는 방법
- 일반적으로 회계 부서의 인원을 먼저 조회하는 것보다 동명 이인을 조회하는 경우가 데이터 건수로 보았을 때 훨씬 적다.
- 따라서 소분류(이름)를 먼저 탐색한 뒤에 대분류(회계 부서)로 탐색하는게 빠르다고 할 수 있다.
  • 멀티 컬럼 인덱스 컬럼 순서는 매우 중요하다.
  • 멀티 컬럼 인덱스 컬럼 구성에서 맨 처음 컬럼의 경우 일반 인덱스처럼 활용할 수 있다.
  • 멀티 컬럼 인덱스 구성시 데이터 중복도가 낮은 컬럼이 앞쪽으로 오는게 좋다.

📚 커버링 인덱스(Covering Index)란?

  • SQL문을 실행시킬 때 필요한 모든 컬럼을 갖고 있는 인덱스를 커버링 인덱스라고 한다.