Oracle - 인덱스

SQL BOOSTER를 읽고

Posted by Yan on March 31, 2024

SQL 스터디 5주차!

INDEX

기본 개념

  • 인덱스: 테이블 내의 데이터를 찾을 수 있게 일부 데이터를 모아서 구성한 데이터 구조
  • 목적: 테이블 내의 데이터를 빠르게 찾아내기 위함
  • 생성방법
1
CREATE INDEX 인덱스명 on 테이블명(컬럼명)

인덱스의 종류

구성하는 컬럼의 수에 따른 분류

  • 단일인덱스Single column index
    • 인덱스에 하나의 컬럼만 사용
    • PK속성이 단일 컬럼일 때 주로 사용
  • 복합인덱스Composite index : 인덱스에 두 개 이상의 컬럼을 사용
    • 여러개의 인덱스를 대신할 수 있음
    • 가능하면 하나의 복합 인덱스로 여러 SQL을 커버하는 게 좋음

구성하는 컬럼 값의 중복 허용 여부에 따른 분류

  • 유니크 인덱스 : 인덱스 구성 컬럼들 값에 중복을 허용하지 않음
    • 데이터베이스 설계 시점부터 업무적으로 유니크한 속성들을 파악해서 유니크 인덱스를 만들어주는 것이 좋다.
  • 비유니크 인덱스: 인덱스 구성 컬럼들 값에 중복을 허용

물리적인 구조에 따른 분류

  • B*트리 인덱스
  • 비트맵 인덱스
    • 값의 종류가 많지 않은 컬럼에 사용

파티션 테이블에 만드는 파티션 된 인덱스

  • 글로벌 인덱스
  • 로컬 인덱스

B*트리 구조

  • 균형이 잡혀 있고, 근접한 리프 노드가 연결(link)된 구조
  • Root block - Branch block - Leaf Block

Root block

  • 최상위에 단 하나만 존재
  • 하위 브랜치 블록의 인덱스 키 값과 주소를 가지고 있음

Branch block

  • 루프와 리프의 중간에 위치, 브랜치는 여러 층이 있을 수 있음
  • 하위 브랜치의 인덱스 키 값과 주소 or 하위 리프의 키 값과 주소를 가지고 있음

Leaf block

  • 최하위에만 위치
  • 인덱스 키 값과 데이터의 ROWID를 가지고 있음
  • 인덱스 키 값 순으로 정렬되어 있음

오라클에서 데이터를 찾는 방법

  1. 테이블 전체 읽기 TABLE ACCESS FULL
  2. 인덱스를 이용한 찾기 INDEX RANGE SCAN & TABLE ACCESS BY INDEX ROWID
  3. ROWID를 이용한 직접 찾기 TABLE ACCESS BY INDEX ROWID
reference

SQL BOOSTER