← 질문 목록
#271깊이 0
뷰 쿼리의 성능 저하는 무엇을 확인해야 하는가?
뷰나 인라인 뷰 작성 시 가장 주의할 점은 옵티마이저의 뷰 병합 실패로 인한 성능 저하다.
| 구분 | 뷰 병합 (Merging) | 뷰 미병합 (Materialization) |
|---|---|---|
| 처리 방식 | 메인 쿼리와 통합 실행 | 결과를 임시 테이블로 구체화 |
| 인덱스 사용 | 원본 표의 인덱스가 후보가 된다 | DBMS에 따라 임시 인덱스를 만들기도 한다 |
옵티마이저가 뷰를 병합하지 못하면 별도 쿼리 블록으로 처리하고, 계획에 따라 구체화하기도 한다. 병합과 푸시다운은 별개라 병합에 실패해도 조건이 뷰 안으로 전달될 수 있다.
GROUP BY나 DISTINCT가 들어간 뷰는 병합이 어렵다. 뷰 결과를 먼저 만들며, 집계가 크거나 디스크로 흘리면 부담이 늘어난다.
뷰 외부 조건이 내부로 전달되는지 확인한다. 조건 절 푸시다운에 실패하면 뷰 전체를 가져온 뒤 필터링한다.
필요 이상으로 많은 테이블을 조인한 뷰를 피한다. 조인 제거 조건을 못 맞추면 일부 컬럼만 필요해도 내부 조인이 그대로 남는다.