h3.해쉬클러스터액세스

  • 해쉬 함수에 의해서 만들어진 해쉬값을 이용하여 클러스터링을 하는 방법
  • 동일한 해쉬값을 가진 데이터를 동일한 블록 내에 저장하여 클러스터 팩터를 높인다
  • Hash Function을 이용하여 Cluster Key Column에 대한 Row를 찾아 간다.
  • Hash Function(Cluster Key Value) → Hash Key Value
  • 어떤 rows를 입력하거나 찾기 위해 Hash Function을 이용한다
  • HASHKEYS * SIZE 파라미터에 의해서 초기 저장공간의 크기(Extent)가 결정된다.
  • 해쉬 클러스터는 생성시에 미리 물리적 디스크 공간을 확보하므로 데이터 증가가 심하게 발생하는 경우는 적절하지 않다.

Hash Cluster 사용시 유리한 경우

  • WHERE 절에 EQUALITY CONDITION을 자주 사용하는 문장에 의해 자주 ACCESS되는 테이블
    SELECT ... WHEN CLUSTER_KEY = ...;
  • 전체 사용량의 추정 가능 한 경우
  • 우편번호 테이블 같은 경우 유리

Hash Cluster 사용시 불리한 경우

  • 계속해서 증가하는 테이블을 저장하기 위해서는 Cluster를 사용하지 말 것.
  • Full Table Scan 을 자주하는 table은 Cluster를 만들지 말 것.
  • Cluster Key Value를 자주 변경하는 Application이라면 Cluster를 사용하지 말 것.
  • LIKE, <>, <, <=, >, >= 등의 조건으로 비교 되는 경우

실행계획

NESTED LOOPS
TABLE ACCESS (BY INDEX ROWID) OF 'EMP'
INDEX (RANGE SCAN) OF 'DEPT_IDX' (NON-UNIQUE)
TABLE ACCESS (HASH) OF 'EMP_HASH'

=> 해쉬엑세스는 인덱스를 경유하지 않기 때문에 이와같이 바로 테이블을 해쉬로 액세스했다는 표현으로 나타난다.