[Oracle] 기초강의 : 01.인덱스

@hizFin · 2022.11.14 13:00:00 · 3 min read

인덱스

  • 테이블의 칼럼에 대해 생성되는 객체로 별도의 공간에 컬럼값들을 정렬한 후 생성
  • 데이터를 빨리 찾기위해서 사용( ROWID(오라클에서 실제 레코드, 행이 있는 물리적 주소)를 찾은 후 실제 원본 데이터를 빠르게 접근)
  • 테이블의 기본키를 생성하면 자동으로 고유 인덱스로 생성됨.
  • 이름처럼 중복값이 있다면 ROWID 정렬
  • 만약 값에 null이 존재한다면 오름차순 정렬시 맨 뒤에 위치하며 null값은 인덱스에 포함되지 않음.

    • 그래서 where COLNM IS NULL을 사용하면 COLNM 인덱스를 경유하지 않음.

인덱스 종류 (01. 만드는 형태에 따라)

단일인덱스

  • 하나의 컬럼

복합인덱스

  • 여러개의 컬럼

오름차순(내림차순) 인덱스

함수기반 인덱스

  • SQL함수나 표현식에 생성

인덱스 종류 (02. 내부 구성에 따라)

B*Tree 인덱스

  • 일반적인 오라클 인덱스인 균형잡힌 트리 형태

Bitmap인덱스

  • 비트를 이용하여 컬럼 값을 간결하게 저장
  • or, not 함수 반응 좋음

itmap Join 인덱스

  • 두 테이블 조인시 조인한 결과 칼럼에 대해 비트맵 인덱스를 생성

역전환키 인덱스

  • 인덱스 컬럼의 값을 역으로 변경하여 B*Tree 인덱스를 구성

(더알아보기) B*Tree 인덱스

  • 오라클에서 만드는 인덱스는 비트리(B*Tree) 인덱스

    • Tree구조와 유사

    002 01

  • 여러개 컬럼으로 구성한다면 첫번째 열, 선행 컬럼은 가장 자주 액세스 되며 유일한 값을 가지는 컬럼을 사용하는 것이 좋음

<💡> 입력 또는 수정이 빈번한 테이블에 많은 인덱스가 있는 경우 문제 생길 가능성 주의

  • OR처럼 범위를 넓히면서 검색하는 경우 제성능 어려움
  • 특히 NOT을 사용하는 부정연산에 취약 (→ 비트맵인덱스에는 좋음)

<💡> where, 조인절에 빈번히 출현하는 컬럼에 인덱스 적용필요

002 02

  • 오라클이 판단하여 원본테이블 또는 index테이블에서 검색을 실시(대량이거나 인덱스가 존재한다면 대체로 index테이블 우선조회함)

    • 힌트로 어느 테이블에서 조회할지 설정 가능
@hizFin
안녕