사용자 도구

사이트 도구


study:oracle:datadb:3week_1:01

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
study:oracle:datadb:3week_1:01 [2010/05/18 10:03]
upju
study:oracle:datadb:3week_1:01 [2010/05/19 10:52] (현재)
upju
줄 6: 줄 6:
  
 {{:study:oracle:datadb:3week_1:02실행계획.jpg|}} {{:study:oracle:datadb:3week_1:02실행계획.jpg|}}
 +
 +{{:study:oracle:datadb:3week_1:03실행계획.jpg|}}
 +
 +==== 3.2.1.1. 전체테이블 스캔  ==== 
   * 3.2.1.1. 전체테이블 스캔    * 3.2.1.1. 전체테이블 스캔 
 +    - HIGH WATER MARK내에 있는 모든 블록을 스캔
 +      * HIGH WATER MARK : 사용된 저장공간의 총합계 또는 데이터를 INSERT하기 위한 포맷된 영역 표시
 +    - 대용량 일수록 전략적으로 사용하면 인덱스 스캔에 비하여 좋은 효율을 나타낼 수 있음(손익 분기점)
 +    - 멀티 블록 I/O
 +    - DB_FILE_MULTIBLOCK_READ_COUNT 파라미터 사용
 +    - 옵티마이져의 전체 테이블 스캔 선택 사유
 +      - 적용가능 인덱스의 부재
 +      - 넒은 범위의 데이터 액세스
 +      - 소량의 테이블 액세스
 +      - 병렬처리 액세스
  
 +==== 3.2.1.2. ROWID 스캔 ==== 
   * 3.2.1.2. ROWID 스캔    * 3.2.1.2. ROWID 스캔 
  
 +==== 3.2.1.3. 인덱스 스캔 ==== 
   * 3.2.1.3. 인덱스 스캔     * 3.2.1.3. 인덱스 스캔  
-    가)인덱스 유일 스캔(Index Unique Scan) +    가)인덱스 유일 스캔(Index Unique Scan) 
-    - 나)인덱스 범위 스캔(Index Range Scan)  +      대부분 단 하나의 ROW를 추출 
-    - 다)인덱스 역순 범위 스캔(Index Range Scan Descending)  +      - 전제조건을 만족할 경우 옵티마이져는 인덱스 유일 스캔을 선택 
-    라)인덱스 스킵 스캔(Index Skip Scan)  +        - 인덱스가 기본키 이거나, 유일 인덱스(UNIQUE INDEX)로 구성 
-    )인덱스 전체 스캔(Index Full Scan)  +        - 인덱스를 구성하는 모든 컬럼들이 모두 조건절에서 ‘=‘(EQUAL)비교 
-    바)인덱스 고속 전체 스캔(Index Fast Full Scans) +      - 데이터베이스 링크(DATABASE LINK) 사용 시 힌트로 적용 
 +      - 힌트는 INDEX(TABLE_ALIAS INDEX_NAME) 힌트 적용 
 +      <code sql> ex) 
 +      SELECT  *  FROM  TAB1  
 +      WHERE  COL1 = ‘A’</code> 
 +    * 나)인덱스 범위 스캔(Index Range Scan) 
 +      추출되는 ROW는 INDEX 구성 컬럼의 정렬 순서와 동일 
 +      - ORDER BY 절이 있더라도 추가 정렬 작업이 필요 없을 수도 있음 
 +      - NON UNIQUE INDEX, UNIQUE INDEX 
 +      - 하나이상의 인덱스 선행컬럼에 상수나 변수로 조건이 부여되어야함 
 +      - 비교연산자는 ‘=, <, <=, >, >=, BETWEEN, LIKE’등 
 +      - 단, LIKE 연산자 사용시 ‘%ABC’의 경우 범위 스캔 불가 
 +      - COL1 + COL2 + COL3 에서 COL2 조건이 없는 경우 
 +      <code sql> ex) 
 +      SELECT  *  FROM  TAB1 
 +      WHERE  COL2 BETWEEN 100 AND 110</code> 
 +    * 다)인덱스 역순 범위 스캔(Index Range Scan Descending) 
 +      - 인덱스를 역순으로 캔 
 +      - 기타 사항에 대하여는 인덱스 범위 스캔과 동일 
 +        - 가장 최근에 발생한 내용을 처리하기 위한 경우 사용 
 +        - 부분범위 처리(Partial Range)를 위해 사용 
 +        ORDER BY …… DESC시 발생 
 +        - INDEX_DESC(TABLE_ALIAS INDEX_NAME) 힌트 사용시 발생 
 +      <code sql> ex) 
 +      SELECT  COL2  FROM  TAB1 
 +      WHERE  COL2 BETWEEN 100 AND 110 
 +      ORDER BY COL1 DESC 
 +      </code> 
 +    * 라)인덱스 스킵 스캔(Index Skip Scan)  
 +      ORACLE 9i부터 적용 
 +      - Cardinality가 낮은 선행 컬럼 + 높은 후행칼럼으로 구성된 인덱스일수록 큰 효과 
 +      - 내부적으로 선행 컬럼 값의 Distinct Value 만큼의 Logical Sub-Index로 나눠서 SCAN한다. 
 +      - Analyze 되어있는 오브젝트에 적용된다. 
 +        
 +{{:study:oracle:datadb:3week_1:04실행계획.jpg|}}
  
 +    * 마)인덱스 전체 스캔(Index Full Scan) 
 +      - 전제조건(일괄 적용될 필요는 없음)
 +        - 조건절에서 인덱스의 컬럼이 적어도 하나이상 사용되었을때
 +        - 반듯이 선행컬럼이 사용될 필요는 없음
 +        - 쿼리 내 사용된 어떤 테이블들의 모든 컬럼들이 인덱스에 존재
 +        - 인덱스 컬럼중 최소한 NOT NULL인 컬럼이 최소 하나는 존재
 +        - ORDER BY절이 사용될 경우 인덱스를 사용하여 SORT가 가능할때
 +        - 반듯이 선행컬럼이 사용될 필요는 없음
 +      - SINGLE BLOCK I/O 수행
 +    * 바)인덱스 고속 전체 스캔(Index Fast Full Scans) 
 +      - 인덱스 스캔만을 하며, 테이블 액세스는 하지 않음
 +      - MULTI BLOCK I/O를 수행
 +      - BITMAP INDEX에서는 적용 불가
 +      - 반듯이 선행컬럼이 사용될 필요는 없음
 +
 +
 +==== 3.2.1.4. B-Tree 클러스터 액세스(Cluster access) ==== 
   * 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.5. 해쉬 클러스터 액세스(Hash cluster access) 
 +    * 클러스터 : 데이터의 클러스터링 팩터를 높여 물리적인 I/O의 효율을 향상하기 위한 방안
 +    * 해쉬 클러스터 : 해쉬함수에 의해 만들어진 해쉬값을 이용하여 클러스터링
 +    * 인덱스 스캔 VS 해쉬클러스터
 +      - 인덱스 스캔 : 인덱스 I/O + 테이블 I/O
 +      - 해쉬 클러스터 : 해쉬함수 생성 + 테이블 I/O
 +      {{:study:oracle:datadb:3week_1:05실행계획.jpg|}} 
 +
 +    * 사용범위
 +      - 액세스 형태가 고정적
 +      - =, IN으로 적용 가능한 테이블
 +      - 해쉬키 컬럼이 수정이 많지 않은 경우
 +      - 데이터 증가가 많지 않은 경우
 + 
 +    *  주의사항
 +      -  지속적인 데이터 INSERT 할 경우
 +        - 해쉬 클러스터의 사이즈를 물리적 공간에 미리 확보함
 +        - 총 해쉬 클러스터의 크기(초기치) = HASHKEYS * SIZE
 +      - 해쉬값의 개수 지정
 +        - 클러스터 생성시 HASHKEYS 값에 의해 결정
 +        - OVERFLOW BLOCK 문제 발생 가능
 +      - 비효율이 발생되는 연산자
 +        - 비교연산자 : LIKE, <>, >, =>, <, <= 등
 +
 +==== 3.2.1.6. 표본 테이블 액세스(Sample table scan) ==== 
 +  * 3.2.1.6. 표본 테이블 액세스(Sample table scan)
 +    * 사용자가 지정한 범위(비율)에 대하여 데이터 처리
 +      - 주의 사항
 +        - 일정 비율의 데이터가 리턴 안 될 수 있음
 +        - 동일한 데이터가 리턴되지 않을 수 있음
 +      - ORACLE 10G 이전
 +        - 단일 테이블에서 적용
 +        - 조인, 뷰 또는 원격 테이블 사용 불가
 +        - 단, 조인은 인라인 뷰를 이용하여 적용가능
 +      - CBO 모드에서만 사용가능  
  
-  * 3.2.1.6. 표본 블 액세스(Sample table scan+    - 데이터 마이닝(DATA MINING) 
 +      - 적은 표본오차 범위 내에서 데터를 선별 
 +      - 데이터 마이닝 프로세스 부하를 축소 
 +    - 데이터 정제(CLEANSING)를 위한 데이터 오류 패턴 분석 
 +      - 데이터 웨어하우스 구축 시 적용 
 +    - 테스트를 위한 표본 데이터 생성 
 +      - 실 환경의 축소판을 생성하여 테스트 환경 구축
  
study/oracle/datadb/3week_1/01.1274144583.txt.gz · 마지막으로 수정됨: 2010/05/18 10:03 저자 upju