본문 바로가기
Oracle DB

인덱스 Index

by jisung-kim 2023. 8. 19.
인덱스란?

 

인덱스이 사전적 정의는 '색인' 이란 뜻이다. 데이터베이스는 테이블 내의 데이터를 찾을 수 있게 일부 데이터를 모아서 구성한 데이터구조 이다. 인덱스를 이용하면 테이블 내의 데이터를 빠르게 찾아낼 수 있다.

 

인덱스의 종류

 

인덱스에 하나에 컬럼만 사용한 '단일 인덱스'와 인덱스에 두개 이상의 컬럼을 사용한 '복합 인덱스'가 있다.

 

또 다른 분류 방법으로는 인덱스 구성 컬럼들 값에 중복을 허용하지 않는 '유니크 인덱스'와 인덱스 구성 컬럼들 값에 중복을 허용하는 '비유니크 인덱스'가 존재한다.

 

데이터를 찾는 방법

 

1.테이블 전체 읽기(Table Access Full Scan)  - 인덱스가 없거나 인덱스보다 테이블 전체를 읽는 것이 더 효율적이라고 판단될 때 사용하는 방법이다. Table Access Full Scan 같은 경우 테이블 블록 전체를 읽는다. 그러므로 테이블이 클 수록 오래 걸린다.

 

만약 1000만 건의 데이터를 가진 테이블에서 찾고자 하는 데이터가 1건 이라면, 천만건을 모두 읽어야 하는 엄청난 비효율이 발생한다. 이럴 경우 Table Access Full Scan은 적절하지 않다.

 

하지만  1000만건의 데이터를 가진 테이블에서 차장야 하는 데이터가 100만건 정도 된다면 Index를 사용하는 것보다 Table Access Full Scan을 하는것이 더 효율적이다.  

 

2.인덱스를 이용한 찾기 (Index Range Scan & Table Access By Index RowId)

1) 루트에서 리프: 검색 조건에 해당하는 첫 번째 리프 블록을 찾는 과정 ( 부하가 없는 과정 )

2) 리프 블록 스캔: 찾아낸 지점부터 리프 블록을 차례대로 읽어 가는 과정

3) 테이블 접근: 리프 블록을 스캔하면서 필요에 따라 테이블에 접근하는 과정

1)번과 2번을 합쳐서 Index Range Scan이라고 한다.

Index Range Scan은 때에 따라 테이블에 접근하는 Table Access By Index RowId 작업을 동반하다.

 

 

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

함수 Function (2)  (0) 2023.08.15
함수 Function (1)  (0) 2023.08.15
커서 ( Cursor)  (0) 2023.08.15
프로시저 Procedure 정의 및 변수종류 (2)  (0) 2023.08.14
프로시저 Procedure 정의 및 변수종류 (1)  (0) 2023.08.12