사용자 도구

사이트 도구


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)

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

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

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

  • 3.2.1.6. 표본 테이블 액세스(Sample table scan)
study/oracle/datadb/3week_1/01.1274161743.txt.gz · 마지막으로 수정됨: 2010/05/18 14:49 저자 upju