홈 › 대용량·배치 › 04 / 8

통계 정보와 힌트

옵티마이저가 계획을 고르는 근거와 강제하는 법
섹션 6진행 0 / 8

6. 정리

옵티마이저는 표의 행 수와 블록 수, 컬럼의 고유 값 수와 NULL 수와 최소·최대, 히스토그램으로 조건별 예상 행 수를 계산합니다. 히스토그램이 없으면 값이 고르게 퍼졌다고 가정하고, 치우친 컬럼에서는 이 가정이 크게 틀립니다.

통계 수집은 Oracle 의 DBMS_STATS.GATHER_TABLE_STATS, MySQL 의 ANALYZE TABLE, MSSQL 의 UPDATE STATISTICS 입니다. 자동 수집이 있어도 대량 적재 직후에는 통계가 낡아 있기 쉬워 배치 끝에 수집을 넣습니다.

바인드 변수와 치우친 분포가 만나면 첫 실행 값의 계획이 굳습니다. 힌트는 계획을 고정하지만 데이터가 바뀌면 오히려 독이 되므로, 통계를 먼저 고치고 힌트는 마지막 수단으로 씁니다. Oracle 힌트는 틀려도 오류가 나지 않아 계획으로 적용 여부를 꼭 확인합니다.

다음 레슨은 파티션입니다. 큰 표를 나눠 필요한 조각만 읽는 프루닝을 다룹니다.