ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION392 / 1500
데이터베이스난이도 중하5분 답변 목표 · 보강본

도시와 우편번호 조건을 함께 넣으면 실제 행 수와 추정 행 수가 크게 다릅니다. 컬럼별 통계만으로 왜 부족할 수 있나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

옵티마이저가 각 조건의 선택도를 독립적으로 결합하면 서로 강하게 연관된 컬럼의 결과 수를 잘못 추정할 수 있습니다. 단일 컬럼 통계가 최신이어도 다중 컬럼의 상관관계를 표현하지 못할 수 있습니다.

동작 원리와 전제

특정 우편번호가 거의 한 도시를 결정한다면 두 필터를 독립적으로 곱해 결과가 훨씬 적다고 예상할 수 있습니다. 잘못된 추정은 join 순서·nested loop 선택·메모리 할당과 spill에 영향을 줍니다. 파라미터 편중과 컬럼 상관은 함께 있을 수 있습니다.

선택과 실패 처리

엔진이 제공하는 확장 통계·다중 컬럼 통계·histogram을 검토하고 대표 질의의 실제 계획을 비교합니다. 통계를 무조건 더 많이 만들면 유지·분석 비용이 들며 모든 관계를 표현할 수 있는 것은 아닙니다. 인덱스 추가와 통계 개선은 서로 다른 처방입니다.

구체적인 사례와 검증

추정 결과가 1행인데 실제로 10만 행이면 nested loop의 반복 lookup과 메모리 부족이 커질 수 있습니다. 반대로 너무 많은 행을 예상해 큰 메모리를 예약하면 다른 요청이 대기할 수도 있습니다. 추정의 방향과 실제 자원 비용을 함께 봅니다. 통계 갱신 후 다른 파라미터의 계획이 나빠질 수 있으므로 한 사례만 고친 것으로 끝내지 않습니다. 다중 컬럼 통계가 표현하는 dependency·distinct·빈도 정보의 종류는 엔진마다 다르고, 모든 join 관계를 자동 추론하지는 못합니다. 질의 구조·인덱스·데이터 분포를 함께 비교해 어떤 정보 부족이 잘못된 계획을 만들었는지 좁히겠습니다.

편중 고객·희귀 조합·존재하지 않는 조합·데이터 증가를 시험합니다. 추정 숫자만 맞추기보다 실제 읽기·join 비용·지연이 개선되는지 봅니다. plan forcing은 완화책일 수 있지만 분포가 바뀌면 재검토해야 하므로 해제 기준을 남깁니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 옵티마이저가 각 조건의 선택도를 독립적으로 결합하면 서로 강하게 연관된 컬럼의 결과 수를 잘못 추정할 수 있습니다.
  • 선택 조건: 엔진이 제공하는 확장 통계·다중 컬럼 통계·histogram을 검토하고 대표 질의의 실제 계획을 비교합니다.
  • 검증 기준: 편중 고객·희귀 조합·존재하지 않는 조합·데이터 증가를 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 단일 컬럼 통계가 최신이면 모든 조건 조합의 행 수도 정확하다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 동일 SQL의 비용이 달라졌다면 추정 행·실제 행·파라미터·대기를 어떤 순서로 비교하나요?
  • 동등 조건·범위·정렬을 함께 만족시키려면 복합 인덱스의 탐색 경계를 어떻게 정하나요?
  • 동점자를 포함한 순위와 정확한 행 수 제한을 어떤 window 함수·보조 키로 표현하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기