성능 최적화 팁
데이터베이스가 커질수록 효율적인 SQL은 더욱 중요합니다.
이 강의에서는 인덱스, 실행 계획, 그리고 설계 전략을 통해 쿼리를 최적화하는 방법을 배웁니다.
1. 인덱스 사용하기
인덱스(index)는 데이터베이스의 목차와 같습니다.
특히 큰 테이블에서 원하는 행을 더 빠르게 찾을 수 있도록 도와줍니다.
인덱스 생성
CREATE INDEX idx_student_name ON students(name);
인덱스를 사용할 때:
다음과 같은 경우 인덱스를 고려하세요.
WHERE
,JOIN
,ORDER BY
에 사용되는 컬럼- 행이 많고 조회가 빈번한 테이블
인덱스를 과도하게 만들지 마세요. 인덱스는 읽기 성능을 높이는 대신 쓰기 성능을 낮출 수 있습니다.
2. SELECT * 지양하기
필요한 컬럼만 조회하면 I/O와 메모리 사용량을 줄일 수 있습니다.
SELECT * vs SELECT name, grade
-- 권장하지 않음
SELECT * FROM students;
-- 더 나은 방법
SELECT name, grade FROM students;
3. EXPLAIN 또는 EXPLAIN QUERY PLAN 사용하기
EXPLAIN
을 사용하면 쿼리가 내부적으로 어떻게 실행되는지 이해할 수 있습니다.
EXPLAIN 사용하기
EXPLAIN QUERY PLAN
SELECT name FROM students WHERE grade > 90;
이를 통해 다음을 확인할 수 있습니다.
- 전체 테이블 스캔(느림)
- 인덱스 사용 여부(빠름)
- 비효율적인 Join이나 정렬
4. 먼저 필터링, 나중에 Join
항상 Join하기 전에 행 수를 줄이세요. 이렇게 하면 속도가 개선됩니다.
선 필터링 예시
-- 더 나은 접근
SELECT *
FROM (SELECT * FROM orders WHERE status = 'paid') AS o
JOIN customers c ON o.customer_id = c.id;
5. 개발 중에는 LIMIT 사용하기
쿼리를 테스트할 때 비용이 큰 실수를 피하려면:
100행 제한
SELECT * FROM logs LIMIT 100;
요약
전략 | 이점 |
---|---|
인덱스 | 더 빠른 검색과 Join |
SELECT * 지양 | 스캔하는 데이터 감소 |
EXPLAIN 사용 | 성능 문제 파악 |
Join 전 필터링 | 더 작고 빠른 Join |
개발 시 LIMIT | 장시간 실행 쿼리 예방 |
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!