histogram 고려사항
■ 히스토그램 고려사항
-특정 열의 비대칭 정도가 높을 때 유용하다
-열의 데이터 분산이 자주 변경될 경우 해당 히스토그램을 자주 재계산해야 한다.
■ 히스토그램이 유용하지 않은 경우
- 열이 where나 join절에 사용되지 않을 경우
- 균등하게 분산된 열(컬럼 통계만으로 충분하다)
- pk나 uk등으로 unique한 값이 있는 = 술어
실질적인 성능 개선이 없다면 히스토그램을 사용하지 않아야 한다. 히스토그램 수집은 통계 수집 중 가장 Load가 높은 작업이기 때문이다.
※ 문자열의 처음 32바이트에 대해서만 히스토그램 데이터가 저장되므로 문자 열에는 일부 예외적인 동작이 있을 수 있다.
열에 표현식을 포함하고 있는 술어는 query 옵티마이저에서 문제(인덱스를 사용하지 못하거나)를 일으킨다.
※ function(column) = constant 형태의 술어에 대한 선택성을 계산할 때 옵티마이저는 정적 선택성 값이 1%라고 가정한다.
■히스토그램 정보 확인
dba_tab_histogram
dba_part_histogram
dba_subpart_histogram
1. 먼저 해당 컬럼이 히스토그램을 가지고 있는지와 종류를 확인하기 위해서 DBA_TAB_COL_STATISTICS를 조회한다.
select owner, table_name, column_name, histogram
from DBA_TAB_COL_STATISTICS
where table_name='SALES'
and column_name='PROD_ID';
OWNER TABLE_NAME COLUMN_NAME HISTOGRAM
------------------------------ ------------------------------ ------------------------------ ---------
SH SALES PROD_ID FREQUENCY
2. 히스토그램을 확인한다.
col column_name for a10
col owner for a10
col table_name for a10
select owner, table_name, column_name, endpoint_number, endpoint_value
from DBA_TAB_HISTOGRAMS
where table_name='SALES'
and column_name='PROD_ID';
OWNER TABLE_NAME COLUMN_NAM ENDPOINT_NUMBER ENDPOINT_VALUE
---------- ---------- ---------- --------------- --------------
SH SALES PROD_ID 6002 13
SH SALES PROD_ID 12012 14
SH SALES PROD_ID 17778 15
SH SALES PROD_ID 24707 16
SH SALES PROD_ID 30867 17
SH SALES PROD_ID 40458 18
SH SALES PROD_ID 50888 19
SH SALES PROD_ID 61791 20
SH SALES PROD_ID 66996 21
SH SALES PROD_ID 70437 22
SH SALES PROD_ID 90079 23
....