데이터베이스에서 **인덱스(index)**는 쿼리 성능을 향상시키는 핵심 요소입니다. 하지만 무분별하게 생성하면 오히려 쓰기 성능 저하와 디스크 낭비로 이어질 수 있으므로, 효율적인 기준을 바탕으로 신중하게 설계해야 합니다.
다음은 인덱스를 효율적으로 생성하기 위한 핵심 기준입니다:
SELECT * FROM users WHERE email = 'test@example.com';
➡️ email 컬럼에 인덱스 생성 추천
SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id;
➡️ orders.customer_id, customers.id에 인덱스 필요
SELECT * FROM articles WHERE category = 'tech' ORDER BY created_at DESC;
➡️ 복합 인덱스: (category, created_at) 추천
예: 인덱스 (a, b, c)일 때 아래 쿼리는 인덱스 사용 O
WHERE a = 1 AND b = 2
하지만 아래 쿼리는 인덱스 사용 X
WHERE b = 2
예시>
| 선택도 높은 컬럼 | 선택도 낮은 컬럼 |
| 이메일, 사용자 ID | 성별, 국가, boolean 값 등 |
SELECT * FROM orders WHERE customer_id = 123 AND order_date BETWEEN '2025-01-01' AND '2025-12-31' ORDER BY order_date DESC;
➡️ 복합 인덱스 추천: (customer_id, order_date)
| 체크 항목 | 예/조건 |
| WHERE 절 자주 등장 | ✅ 인덱스 고려 |
| JOIN 키로 사용 | ✅ 인덱스 필수 |
| ORDER BY, GROUP BY 컬럼 | ✅ 인덱스 유리 |
| 선택도가 높은 컬럼 | ✅ 인덱스 효과 큼 |
| 자주 업데이트되는 컬럼 | ⚠️ 인덱스 신중히 |
| INSERT/UPDATE/DELETE 많은 테이블인가? | ⚠️ 인덱스 최소화 |
| sql 쿼리 select 조회할때 컬럼값을 ' ' 작은따옴표로 감싸서 조회하고 싶은데 어떻게 조회해야 할까요? (1) | 2025.08.02 |
|---|---|
| sql 쿼리에서 substring_index 함수 사용하는 방법은? (0) | 2025.07.20 |
| sql 쿼리에서 current_timestamp 기능이란? (1) | 2025.07.19 |
| sql 쿼리에서 순위 dense_rank() 함수 사용하는 방법은? (0) | 2025.07.19 |
| SQL 쿼리 날짜 차이 구하기 datediff 사용하는 방법 (0) | 2025.07.14 |