[Database] 대용량 쿼리 성능 최적화를 위한 고려 요소

Hyunjun Kim·2025년 8월 4일
0

Data_Engineering

목록 보기
117/153

1. 데이터 접근 구조 (Access Pattern) 최적화

고려 요소설명성능 저하 유발 원인
Index 활용 여부WHERE/JOIN 조건이 인덱스를 탈 수 있는가인덱스를 무력화하는 연산 사용
Partition Pruning파티션 키를 조건에 넣어야 함파티션 범위 제한 실패로 전체 스캔
Clustering / Z-ordering물리 저장 순서와 쿼리 패턴 일치 여부분산 스캔으로 I/O 증가
필터 조건 위치WHERE에서 조기 필터링 가능 여부늦은 필터링으로 불필요한 처리 발생

2. 조인 구조 (Join Strategy) 최적화

고려 요소설명성능 저하 유발 원인
JOIN 순서작은 테이블을 먼저 읽는 구조가 유리큰 테이블 선조인으로 리소스 낭비
JOIN 방식해시, 중첩 루프 등 방식의 적절성인덱스 없이 전수 비교 발생
중복된 조인 제거동일 서브쿼리를 반복해서 JOIN중복 계산으로 성능 저하 유발

3. Aggregation / Grouping 구조 최적화

고려 요소설명성능 저하 유발 원인
Group Key Cardinality그룹핑 키의 고유값 수 크기메모리 기반 해시 테이블 과부하
Pre-Aggregation미리 요약된 결과를 쓸 수 있는가불필요한 raw 데이터 집계 발생
중첩 Aggregation복수 집계 함수 중첩 사용 여부중간 결과 반복 처리로 부담 증가

4. 함수 / 표현식 사용 방식 최적화

고려 요소설명성능 저하 유발 원인
함수 위치WHERE, JOIN, GROUP BY 내부 함수 여부인덱스 무력화로 전량 스캔 발생
중복 계산 제거동일 표현식 재사용 여부반복 계산으로 CPU 과부하 유발
복잡한 UDF / Regex / JSON고비용 연산 함수의 다량 호출 여부함수 반복 호출로 CPU 병목 발생

5. 데이터 양 및 구조 관련 고려

고려 요소설명성능 저하 유발 원인
SELECT * 사용 여부모든 컬럼을 가져오는지 여부불필요한 컬럼까지 I/O 발생
Wide Table 처리 여부컬럼 수가 매우 많은 테이블 여부디코딩 비용 증가로 CPU 부담
Row 수 / Table Size테이블 행 수가 많은 경우기본 Scan만으로도 응답 지연 초래

6. Execution Plan 분석

고려 요소설명성능 저하 유발 원인
Full Table Scan테이블 전체를 순차적으로 탐색필터 부재로 인한 전체 스캔 발생
Temp Table / Spill메모리 부족 시 디스크 사용 여부정렬, 조인 중 디스크 I/O 증가
Shuffle 발생 (분산환경)노드 간 데이터 재배치 유무네트워크 전송량 급증으로 병목 발생

7. 물리적 저장 구조와 포맷

고려 요소설명성능 저하 유발 원인
컬럼형 포맷 사용 여부필요한 컬럼만 읽을 수 있는 구조인지Row 포맷 사용으로 전체 읽기 유발
파일 사이즈/분할 수적절한 크기와 병렬성 유지 여부너무 작은 파일로 Executor 낭비
데이터 스키마 변경스키마 진화 및 호환성 처리 여부스키마 병합 과정에서 I/O 증가

8. 쿼리 작성 습관 개선

고려 요소좋은 습관나쁜 습관
필터 조건 먼저 작성WHERE → JOIN → GROUP BY 순서 유지필터 없이 모든 데이터 JOIN
CTE / TEMP TABLE로 쿼리 분리가독성과 디버깅 용이긴 서브쿼리 중첩으로 유지보수 어려움
Explain Plan 자주 확인사전 성능 예측 가능결과만 보고 성능 판단

정리: 종합 성능 최적화 프레임워크

  1. 데이터 양과 인덱스 구조 파악
  2. 필터링 → 조인 → 집계 → 정렬 순으로 쿼리 구조 설계
  3. 함수/서브쿼리는 반복 실행 여부 중심으로 리팩터링
  4. 실행계획으로 비용 확인 후 병목 구간 추적
  5. 물리적 저장 포맷과 Partition 전략 연동
  6. Spark/Presto/Hive 등의 분산환경이라면 Shuffle, Skew 분석 추가
profile
Data Analytics Engineer 가 되

0개의 댓글