Back-end

Query 최적화: Indexing

dohyunKim 2025. 3. 6. 10:22

Query 최적화: Indexing 및 EXPLAIN으로 Query Plan 확인

1. 단일 인덱스 (Single Index)

특징

  • 하나의 컬럼에 대해서만 생성하는 인덱스
  • 단순 조회 및 WHERE 절에 하나의 조건만 존재할 때 효과적
  • B-Tree 자료구조로 구성되어 빠른 탐색 가능

장점

  • 조회 성능 향상
  • 간단한 쿼리 최적화에 적합

예시

SELECT * FROM users WHERE username = 'dohyun';

2. 복합 인덱스 (Composite Index)

특징

  • 여러 컬럼을 묶어 생성하는 인덱스
  • WHERE 절에 여러 조건을 가진 쿼리에 효과적
  • 복합 인덱스의 순서가 중요하며, 중간 컬럼을 기준으로 단독 조회는 불가능

주의사항

  • 컬럼의 Cardinality(고유값 비율)가 높은 순으로 컬럼을 지정하는 것이 효율적
  • 인덱스에 정의된 컬럼 순서를 지켜서 쿼리를 작성해야 인덱스 사용률이 높아짐

장점

  • 여러 조건을 동시에 만족하는 쿼리 최적화 가능
  • WHERE 절과 ORDER BY 절이 동시에 존재하는 경우 성능 극대화 가능

예시

복합 인덱스를 (status, created_at)으로 생성 시:

SELECT * FROM orders
WHERE status = 'shipped'
ORDER BY created_at;
  • 위 쿼리는 status로 먼저 필터링한 후, created_at으로 정렬하는 순서로 인덱스를 빠르게 탐색
  • WHERE 조건과 ORDER BY를 동시에 최적화하여 성능 향상

3. Query Plan 확인 (EXPLAIN)

  • PostgreSQL, MySQL 등에서 제공하는 EXPLAIN 명령어를 사용하여 Query Plan 확인 가능
  • 인덱스가 실제로 사용되는지, 어떤 순서로 탐색이 진행되는지 파악할 수 있음