DB/Oracle DB

Oracle 실행 계획

YL 2018. 12. 1. 18:20
반응형

  • SCAN
    DB에 적재된 데이터를 읽는 작업
    • FULL TABLE SCAN: 테이블 전체 스캔
      • 많은 데이터를 이용할 때 좋음. 테이블의 일정 비율 이상되는 데이터가 필요할 때.
    • ROWID SCAN: Oracle 고유 컬럼인 ROW ID라는 행번호로 스캔
      • Where 조건절에 ROWID를 입력하는 경우 이용.
      • 추출할 데이터양을 제한할 때 사용 (MSSQL의 TOP N과 유사한 용도)
    • INDEX SCAN: Index를 이용하여 데이터 스캔
      • 적은 데이터를 추출할 때 좋음
      • INDEX UNIQUE SCAN
        • UNIQUE INDEX를 사용하는 경우.
        • 조건절에 UNIQUE INDEX 컬럼 = 로 명시
        • 조건에 부합하는 데이터를 찾을 경우 탐색을 종료함
      • INDEX RANGE SCAN (DESCENDING)
        • 가장 흔하게 사용되는 방식
        • INDEX 내의 조건절에 명시된 범위의 데이터에 오름차순으로 접근 (ORDER BY DESC를 한 경우 내림차순)
        • 조건절이 INDEX 선행컬럼이 있는 경우. 조건값에 와일드 카드를 이용하는 경우 ( LIKE 'AA__%')
      • INDEX SKIP SCAN (DESCENDING)
        • 결합 인덱스의 후행컬럼은 있으나 선행컬럼(첫번째컬럼)이 조건절에 없는 경우  (ORDER BY DESC를 한 경우 내림차순)
        • 선행컬럼이 범위 검색 조건일 경우(LIKE, BETWEEN, 부등호)
        • 옵티마이저가 INDEX 내에서 조회하는 것이 TABLE FULL SCAN보다 빠르다고 판단한 경우
        • INDEX COLUM: A B C
          WHERE B = 'AAA'
          와 같이 작성된 경우 WHERE절에 A(선행컬럼)가 없는 경우.
        • 힌트: INDEX_SS (반대 NO_INDEX_SS)
      • INDEX FULL SCAN
        • 인덱스 블록 전체를 순차적으로 접근하는 방식
        • INDEX RANGE SCAN과 동일한 매커니즘으로 동작
        • 최적의 인덱스가 없는 경우, FULL TABLE SCAN보다 효율적일 경우
        • ORDER BY INDEX 컬럼 혹은 MIN, MAX값을 구하는 경우 용이
          NOT NULL 조건과 함께 ORDER BY 사용해야 INDEX FULL을 이용할 수 있음, 결과집함이 많을 경우 FULL TABLE SCAN이 나음
        • SELECT /*+ INDEX(T) */ C FROM T WHERE C IS NOT NULL
          인덱스 이용, INDEX 컬럼에 NULL이 아닌 전체이므로 INDEX 전체가 되는 것
          (NULL이 있으면 INDEX를 사용할 수 없음)
      • INDEX FAST FULL SCAN
        • 인덱스 블록 전체를 병렬 처리로 접근하는 방식
        • INDEX FULL SCAN과 달리 순차적이지 않으므로 정렬을 지원하지 않음
        • 병렬처리를 지원하여 속도가 빠름
        • 단, 힌트를 명시해야만 이용 가능
        • 힌트: INDEX_FFS (반대 NO_INDEX_FFS)
    • INDEX 힌트 사용법
      /*+ INDEX_FFS(테이블명) */:                     SELECT /*+ INDEX_FFS(T) */ C FROM T
      /*+ INDEX_FFS(테이블명 인덱스명) */:         SELECT /*+ INDEX_FFS(T IDX) */ C FROM T
      /*+ INDEX_FFS(테이블명 테이블(컬럼명)) */: SELECT /*+ INDEX_FFS(T T(C)) */ C FROM T

인덱스에 관련된 다양한 자료를 조사하여 정리
INDEX 전체 
INDEX FULL SCAN 
INDEX FAST FULL SCAN


반응형

'DB > Oracle DB' 카테고리의 다른 글

tnsnames.ora 위치  (0) 2022.11.04
ORACLE 프로시저 호출 변수 선언  (0) 2022.06.08
Oracle 설치 없이 Toad 사용하기  (0) 2021.09.01
ORACLE SQL 팁 - 특정 컬럼 SELECT  (0) 2020.07.05
Oracle SQL 실행계획  (0) 2018.12.01