⚡ 쿼리 최적화 개요
- 쿼리 최적화는 데이터베이스 성능을 개선하기 위한 과정.
- 복잡한 쿼리를 효율적으로 실행하여 응답 시간을 줄이고, 서버 자원 소모를 최소화.
🔍 인덱스 활용
- 인덱스는 테이블 내 데이터를 빠르게 검색할 수 있도록 도와주는 데이터 구조.
- 주요 인덱스 종류
- B-Tree: 기본 인덱스, 대부분의 쿼리에서 유용.
- Hash: 해시 기반 인덱스,
=
연산자에 최적화.
- GiST: 공간적 검색 및 복잡한 쿼리에 유용.
- GIN: Full-text 검색 및 배열, JSON 데이터에 유용.
- 인덱스 사용 시 주의사항
- 너무 많은 인덱스를 생성하면 쓰기 성능에 악영향을 미침.
- 자주 조회되는 컬럼에 인덱스를 추가하는 것이 좋음.
📝 EXPLAIN으로 실행 계획 분석
- EXPLAIN 명령어를 사용해 쿼리 실행 계획을 분석.
- EXPLAIN: 쿼리가 어떻게 실행될지에 대한 정보를 제공.
- EXPLAIN ANALYZE: 실제 실행 시간을 포함한 실행 계획을 반환.
- 실행 계획 분석 주요 항목
- Seq Scan: 전체 테이블을 순차적으로 검색 (비효율적일 수 있음).
- Index Scan: 인덱스를 사용하여 빠르게 데이터를 조회.
- Nested Loop: 중첩된 반복문을 통해 데이터를 찾음 (성능에 영향 있을 수 있음).
🛠️ 쿼리 성능 개선 기법
- JOIN 최적화
- 적절한 인덱스를 사용하여 조인의 성능을 향상시킬 수 있음.
- 조인 순서를 변경하면 성능에 영향을 미칠 수 있음.
- 서브쿼리 최적화
- 서브쿼리 대신 조인을 사용하여 성능을 개선할 수 있음.
- 서브쿼리에서 결과를 미리 계산하고 메인 쿼리와 결합하는 방식 고려.
- WHERE 절 최적화
- 자주 조회되는 조건에 인덱스를 사용하고, 불필요한 조건을 제거하여 쿼리를 단순화.
- 부하가 큰 함수 (예:
LOWER()
, TO_DATE()
)는 필터링 전에 처리하지 않도록.
- LIMIT 사용
- 불필요한 데이터 조회를 방지하기 위해 LIMIT을 사용.
- 대량의 데이터를 처리할 필요가 없는 경우, 조회되는 데이터의 범위를 제한.
💡 주의할 점