사용자 도구

사이트 도구


study:oracle:datadb:3week_1:01

3.2.1. 스캔(Scan)의 기본유형

  • <color red>스캔 : </color> 스캔은 데이터를 최종적으로 액세스하는 방법을 말하는 가장 기본적인 실행계획

3.2.1.1. 전체테이블 스캔

  • 3.2.1.1. 전체테이블 스캔
    1. HIGH WATER MARK내에 있는 모든 블록을 스캔
      • HIGH WATER MARK : 사용된 저장공간의 총합계 또는 데이터를 INSERT하기 위한 포맷된 영역 표시
    2. 대용량 일수록 전략적으로 사용하면 인덱스 스캔에 비하여 좋은 효율을 나타낼 수 있음(손익 분기점)
    3. 멀티 블록 I/O
    4. DB_FILE_MULTIBLOCK_READ_COUNT 파라미터 사용
    5. 옵티마이져의 전체 테이블 스캔 선택 사유
      1. 적용가능 인덱스의 부재
      2. 넒은 범위의 데이터 액세스
      3. 소량의 테이블 액세스
      4. 병렬처리 액세스

3.2.1.2. ROWID 스캔

  • 3.2.1.2. ROWID 스캔

3.2.1.3. 인덱스 스캔

  • 3.2.1.3. 인덱스 스캔
    • 가)인덱스 유일 스캔(Index Unique Scan)
      1. 대부분 단 하나의 ROW를 추출
      2. 전제조건을 만족할 경우 옵티마이져는 인덱스 유일 스캔을 선택
        1. 인덱스가 기본키 이거나, 유일 인덱스(UNIQUE INDEX)로 구성
        2. 인덱스를 구성하는 모든 컬럼들이 모두 조건절에서 ‘=‘(EQUAL)비교
      3. 데이터베이스 링크(DATABASE LINK) 사용 시 힌트로 적용
      4. 힌트는 INDEX(TABLE_ALIAS INDEX_NAME) 힌트 적용
 ex)
      SELECT  *  FROM  TAB1 
      WHERE  COL1 = ‘A’
  • 나)인덱스 범위 스캔(Index Range Scan)
    1. 추출되는 ROW는 INDEX 구성 컬럼의 정렬 순서와 동일
    2. ORDER BY 절이 있더라도 추가 정렬 작업이 필요 없을 수도 있음
    3. NON UNIQUE INDEX, UNIQUE INDEX
    4. 하나이상의 인덱스 선행컬럼에 상수나 변수로 조건이 부여되어야함
    5. 비교연산자는 ‘=, <, ⇐, >, >=, BETWEEN, LIKE’등
    6. 단, LIKE 연산자 사용시 ‘%ABC’의 경우 범위 스캔 불가
    7. COL1 + COL2 + COL3 에서 COL2 조건이 없는 경우
 ex)
      SELECT  *  FROM  TAB1
      WHERE  COL2 BETWEEN 100 AND 110
  • 다)인덱스 역순 범위 스캔(Index Range Scan Descending)
    1. 인덱스를 역순으로 스캔
    2. 기타 사항에 대하여는 인덱스 범위 스캔과 동일
      1. 가장 최근에 발생한 내용을 처리하기 위한 경우 사용
      2. 부분범위 처리(Partial Range)를 위해 사용
      3. ORDER BY …… DESC시 발생
      4. INDEX_DESC(TABLE_ALIAS INDEX_NAME) 힌트 사용시 발생
 ex)
      SELECT  COL2  FROM  TAB1
      WHERE  COL2 BETWEEN 100 AND 110
      ORDER BY COL1 DESC
 
  • 라)인덱스 스킵 스캔(Index Skip Scan)
    1. ORACLE 9i부터 적용
    2. Cardinality가 낮은 선행 컬럼 + 높은 후행칼럼으로 구성된 인덱스일수록 큰 효과
    3. 내부적으로 선행 컬럼 값의 Distinct Value 만큼의 Logical Sub-Index로 나눠서 SCAN한다.
    4. Analyze 되어있는 오브젝트에 적용된다.

  • 마)인덱스 전체 스캔(Index Full Scan)
    1. 전제조건(일괄 적용될 필요는 없음)
      1. 조건절에서 인덱스의 컬럼이 적어도 하나이상 사용되었을때
      2. 반듯이 선행컬럼이 사용될 필요는 없음
      3. 쿼리 내 사용된 어떤 테이블들의 모든 컬럼들이 인덱스에 존재
      4. 인덱스 컬럼중 최소한 NOT NULL인 컬럼이 최소 하나는 존재
      5. ORDER BY절이 사용될 경우 인덱스를 사용하여 SORT가 가능할때
      6. 반듯이 선행컬럼이 사용될 필요는 없음
    2. SINGLE BLOCK I/O 수행
  • 바)인덱스 고속 전체 스캔(Index Fast Full Scans)
    1. 인덱스 스캔만을 하며, 테이블 액세스는 하지 않음
    2. MULTI BLOCK I/O를 수행
    3. BITMAP INDEX에서는 적용 불가
    4. 반듯이 선행컬럼이 사용될 필요는 없음

3.2.1.4. B-Tree 클러스터 액세스(Cluster access)

  • 3.2.1.4. B-Tree 클러스터 액세스(Cluster access)
    1. 클러스터링 테이블의 형태
      1. 대량의 범위처리의 효율화를 위한 단일 테이블 클러스터링
      2. 조인의 효율을 높이기 위한 두개 이상의 테이블 클러스터링

3.2.1.5. 해쉬 클러스터 액세스(Hash cluster access

  • 3.2.1.5. 해쉬 클러스터 액세스(Hash cluster access)
    • 클러스터 : 데이터의 클러스터링 팩터를 높여 물리적인 I/O의 효율을 향상하기 위한 방안
    • 해쉬 클러스터 : 해쉬함수에 의해 만들어진 해쉬값을 이용하여 클러스터링
    • 인덱스 스캔 VS 해쉬클러스터
      1. 인덱스 스캔 : 인덱스 I/O + 테이블 I/O
      2. 해쉬 클러스터 : 해쉬함수 생성 + 테이블 I/O

  • 사용범위
    1. 액세스 형태가 고정적
    2. =, IN으로 적용 가능한 테이블
    3. 해쉬키 컬럼이 수정이 많지 않은 경우
    4. 데이터 증가가 많지 않은 경우
  • 주의사항
    1. 지속적인 데이터 INSERT 할 경우
      1. 해쉬 클러스터의 사이즈를 물리적 공간에 미리 확보함
      2. 총 해쉬 클러스터의 크기(초기치) = HASHKEYS * SIZE
    2. 해쉬값의 개수 지정
      1. 클러스터 생성시 HASHKEYS 값에 의해 결정
      2. OVERFLOW BLOCK 문제 발생 가능
    3. 비효율이 발생되는 연산자
      1. 비교연산자 : LIKE, <>, >, ⇒, <, ⇐ 등

3.2.1.6. 표본 테이블 액세스(Sample table scan)

  • 3.2.1.6. 표본 테이블 액세스(Sample table scan)
    • 사용자가 지정한 범위(비율)에 대하여 데이터 처리
      1. 주의 사항
        1. 일정 비율의 데이터가 리턴 안 될 수 있음
        2. 동일한 데이터가 리턴되지 않을 수 있음
      2. ORACLE 10G 이전
        1. 단일 테이블에서 적용
        2. 조인, 뷰 또는 원격 테이블 사용 불가
        3. 단, 조인은 인라인 뷰를 이용하여 적용가능
      3. CBO 모드에서만 사용가능
  1. 데이터 마이닝(DATA MINING)
    1. 적은 표본오차 범위 내에서 데이터를 선별
    2. 데이터 마이닝 프로세스 부하를 축소
  2. 데이터 정제(CLEANSING)를 위한 데이터 오류 패턴 분석
    1. 데이터 웨어하우스 구축 시 적용
  3. 테스트를 위한 표본 데이터 생성
    1. 실 환경의 축소판을 생성하여 테스트 환경 구축
study/oracle/datadb/3week_1/01.txt · 마지막으로 수정됨: 2010/05/19 10:52 저자 upju