INDEX RANGE SCAN

.·2024년 4월 14일
0

ORACLE

목록 보기
6/8

1. INDEX SCAN 종류

2. INDEX RANGE SCAN 순서

SELECT /*+ GATHER_PLAN_STATISTICS INDEX(EMP EMP_SAL) */  SAL, ENAME
FROM EMP
WHERE SAL > 1600;

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));




1) 인덱스 테이블에서 조건을 찾음
2) 조건에 만족하는 다음 행이 있는지 확인 -> INDEX RANGE SCAN
3) 조건에 만족하지 않을 때 까지 읽음

2. INDEX UNIQUE SCAN vs INDEX RANGE SCAN

  • INDEX UNIQUE SCAN
    만족하는 행을 하나 찾고, 그 다음 행을 읽지 않고 바로 테이블 액세스
    UNIQUE 제약이 설정된 컬럼이라 데이터가 유일하여 조건 부합 행 또한 단 하나 뿐일 것이라는 것이 보장된 경우

  • INDEX RANGE SCAN
    만족하는 행을 찾고, 조건에 만족하지 않을 때까지 다음 행을 읽은 후 테이블 액세스
    컬럼
    UNIQUE 제약이 설정된 컬럼이 아니라 데이터 중복이 가능한 경우

3. INDEX 생성

INDEX 생성

CREATE INDEX EMP_ENAME ON EMP(ENAME);

UNIQUE INDEX 생성

CREATE UNIQUE INDEX EMP_ENAME ON EMP(ENAME);

값이 중복된 경우 UNIQUE INDEX 생성 불가

PK 컬럼, UNIQUE 컬럼이 아니라도 값이 중복되지 않으면 UNIQUE INDEX 생성 가능

CREATE UNIQUE INDEX EMP_ENAME ON EMP(ENAME);

SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM EMP
WHERE ENAME = 'BLAKE';

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));

1. 숫자형 컬럼 INDEX RANGE SCAN

SELECT /*+ INDEX(EMP EMP_SAL) */  ENAME, SAL
FROM EMP
WHERE SAL = 1600;

2. 문자형 컬럼 INDEX RANGE SCAN

SELECT /*+ INDEX(EMP EMP_ENAME) */ ENAME, SAL
FROM EMP
WHERE ENAME = 'SCOTT';

3. 중복 데이터 컬럼 INDEX RANGE SCAN


SELECT /*+ INDEX(EMP EMP_JOB) */ ENAME, SAL
FROM EMP
WHERE JOB = 'MANAGER';



[이지업클래스] 실무에서 바로 쓰는 SQL 튜닝법 수강 후 정리한 내용입니다.

0개의 댓글