통계 & 데이터 분포 분석 — 인덱스가 무용지물 되는 순간과 해결책
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. pg_stats 뷰에서 n_distinct = -0.05가 의미하는 것은?
💡 n_distinct가 음수이면 전체 행 대비 고유값의 비율을 나타냅니다. -0.05는 전체 행의 5%가 고유값임을 의미합니다. 양수이면 절대적인 고유값 수를 나타냅니다(예: 5는 고유값이 정확히 5개).
Q2. ANALYZE를 실행하지 않으면 어떤 문제가 발생할 수 있나?
💡 PostgreSQL 플래너는 통계(pg_statistic)를 기반으로 실행 계획을 결정합니다. 대량 INSERT 후 ANALYZE 없이 쿼리하면 오래된 통계로 인해 잘못된 선택율 추정 → 인덱스를 쓸 때 쓰지 않거나, 쓰면 안 될 때 쓰는 계획이 나올 수 있습니다.
Q3. SSD 서버에서 인덱스가 예상보다 덜 사용될 때 조정해야 할 설정은?
💡 random_page_cost는 임의 I/O(인덱스 스캔)의 비용을 나타냅니다. 기본값 4.0은 HDD 기준이며, SSD에서는 임의 접근 비용이 순차 접근과 비슷하므로 1.1~2.0으로 낮추면 플래너가 인덱스를 더 적극적으로 선택합니다.
Q4. 확장 통계(Extended Statistics)의 주요 용도는?
💡 기본 통계는 각 컬럼을 독립적으로 처리합니다. 여러 컬럼에 상관관계가 있을 때(예: 시와 구는 함께 등장) WHERE city='서울' AND district='강남구' 같은 복합 조건의 선택율을 과소평가합니다. CREATE STATISTICS로 여러 컬럼의 공동 분포를 학습시키면 더 정확한 행 수 추정이 가능합니다.
Q5. default_statistics_target을 높이면 어떤 트레이드오프가 발생하나?
💡 statistics_target을 높이면 히스토그램 버킷 수가 늘어나 플래너의 행 수 예측 정확도가 높아집니다. 단, ANALYZE 실행 시간이 늘어나고 pg_statistic에 더 많은 데이터를 저장하여 메모리 사용량이 증가합니다. 문제가 되는 특정 컬럼만 선택적으로 높이는 것이 권장됩니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.