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 확인 가능
- 인덱스가 실제로 사용되는지, 어떤 순서로 탐색이 진행되는지 파악할 수 있음