본문 바로가기

빅데이터과정/SQL TUNING

#37_140805_TUNING_HISTOGRAM

728x90

# HISTOGRAM




히스토그램이란?

데이터의 분포도의 편차가 심한 emp100 테이블의 ename의 경우에는 히스토그램을 생성해야 한다그래야 실행계획이 정확해진다
통계정보 수집 : sampling 할 data를 담을 상자(버켓)를 1
히스토그램을 수집 : sampling 할 data를 담을 상자(버켓)를 여러 개
중복된 데이터가 많은 경우를 표준편차가 크다고 표현하는데 이런 경우에는 버켓이 여러 개가 필요해서 히스토그램을 수집해야 한다
반면에 emp 테이블 같은 경우는 표준편차가 작다고 표현하는데 이런 경우는 버켓이 한 개로 충분하여 통계정보를 수집해야 한다



히스토그램 테스트
  

1.     exec dbms_stats.delete_table_stats('SCOTT','EMP100');

2.     EXEC dbms_stats.gather_table_stats('SCOTT','EMP100',method_opt=> 'for all columns size 1');
버켓의 개수를 1개로 해서 수집

3.     SELECT * FROM EMP100 WHERE ename='scott1';
SELECT  * FROM EMP100 WHERE ename='scott99';
버켓 개수가 1개 이기 때문에 scott1이 있는지 모르고 대부분 scott99가 있는지 알고 있기 때문에 둘다 full scan을 수행한다



1.     EXEC dbms_stats.gather_table_stats('SCOTT','EMP100',method_opt=> 'for all columns size 20');
버켓의 개수를 20개로 수행

2.     SELECT * FROM EMP100 WHERE ename='scott1';

3.     SELECT  * FROM EMP100 WHERE ename='scott99';

4.     EXEC dbms_stats.gather_table_stats('SCOTT','EMP100',method_opt=> 'for all columns size auto');
몇 개로 해야할지 잘 모르겠다면 auto 로 설정