인덱스 구조

.·2024년 4월 14일
0

ORACLE

목록 보기
5/8

1. ROWID

  • 테이블 ROW의 주소
  • 구성: FILE 번호 + BLOCK 번호 + ROW 번호
  • 모든 테이블의 ROW는 각각의 ROWID를 가짐
  • ROWID는 Shadow Column이라 SELECT 구문에서 명시해줘야 확인 가능
SELECT ROWID, A.*
FROM EMP A;

2. INDEX

  • FULL SCAN
    인덱스 없이 테이블을 전체 행을 모두 읽음
    해당하는 조건의 행을 찾더라도 다음 행에 또 해당하는 행이 있을 수 있으므로 모든 행을 읽음

  • INDEX SCAN
    구조: 정의한 컬럼값 + ROWID (+정렬)
    컬럼값이 정렬되어 있기 때문에 목차를 통해 빠르게 데이터 검색 가능
    해당하는 ROWID를 가지고 원본 테이블에 접근하여 SELECT에 필요한 나머지 컬럼을 찾음

3. 인덱스 확인

SELECT *
FROM ALL_IND_COLUMNS
WHERE TABLE_NAME = 'EMP';

4. 인덱스 유무에 따른 SELECT 정렬

SELECT SAL, ROWID
FROM EMP
WHERE SAL >= 0;


테이블에서 읽어왔다면 INSERT된 순서대로(ROWID 순) 정렬된 결과를 확인할 수 있음


인덱스에서 불러왔다면 인덱스 컬럼 정렬 순으로 정렬된 결과를 확인할 수 있음

5. 숫자형 컬럼의 인덱스

ASC: 값이 작은 순서대로
DESC: 값이 큰 순서대로

SELECT SAL, ROWID
FROM EMP
WHERE SAL >= 0; -- 전체 ROW 조회됨

6. 문자형 컬럼의 인덱스


ASC: 사전등재 순
DESC: 사전등재 역순

SELECT ENAME, ROWID
FROM EMP
WHERE ENAME >= ' '; -- 전체 ROW 조회됨

7. 날짜형 컬럼의 인덱스


ASC: 날짜가 이른 순서대로
DESC: 날짜가 늦은 순서대로

SELECT HIREDATE, ROWID
FROM EMP
WHERE HIREDATE < TO_DATE('9999/12/31', 'RRRR/MM/DD'); -- 전체 ROW 조회됨



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

0개의 댓글