취미로 음악을 하는 개발자

[ORACLE] 인덱스(INDEX) 본문

공대인/DB

[ORACLE] 인덱스(INDEX)

영월특별시 2021. 3. 6. 21:27
728x90

인덱스란

테이블에 존재하는 여러 데이터 행 중 원하는 데이터만 빠르게 찾을 수 있도록 테이블의 하나 이상의 열로 구성된 데이터베이스 오브젝트

Ex) 전화번호부, 찾아보기 등

 

인덱스 특징

- 하나 이상의 컬럼과 ROWID로 구성될 수 있다

- 구성된 열 순으로 자료가 정렬되어 있다

- 하나의 테이블에 하나 이상의 인덱스를 만들 수 있다

- 인덱스를 만들면 테이블과는 별도로 디스크에 저장된다

- 인덱스와 테이블을 ROWID를 사용하여 연결되어 있다

 

인덱스 스캔 절차

1)     ROWID로 인덱스 컬럼 중 조건에 맞는 열 검색

2)     해당 테이블의 행 액세스

3)     테이블 중 원하는 열 조회

 

인덱스 생성 기준

: 인덱스를 너무 많이 생성하면 데이터 변경 작업 시 DBMS에 부하를 주게 됨으로 반드시 필요하고 자주 사용되는 형태의 인덱스를 구성해야 한다

 

- SQL문의 조회 조건으로 자주 나오는 열

- 가능한 수정이 빈번하지 않는 열

- 같은 값이 적은 열 (분포도가 10% 미만인 열)

- 분포도가 좋은 열을 단독적으로 생성하여 활용도 향상

- 자주 조합되어 사용되는 경우는 결합 인덱스 생성 (열의 순서 선정이 중요)

- 조인의 조건으로 자주 사용하는 열

 

인덱스 사용 시 고려사항

- 지나치게 많은 인덱스를 사용하거나 넓은 범위를 인덱스로 처리하면 오버헤드를 발생

- 옵티마이저를 위한 통계데이터를 주기적으로 갱신하여야 한다

- 아주 빈번이 사용하는 열은 모두 인덱스에 포함시킨다

 

인덱스 종류

Function Based 인덱스

인덱스 키 생성시 컬럼에 연산을 수행한 결과 값을 인덱스로 생성

SUM, AVG같은 Aggregate 함수로는 인덱스 생성 불가

LOB, REF 타입의 컬럼을 생성 불가

Ex) CREATE INDEX 인덱스명 ON 테이블명 (컬럼1 – 컬럼2);
Bitmap 인덱스

어떤 값의 존재 여부를 10으로만 표현하여 하나의 집합으로 구성하는 방식

적은 분포도의 값을 갖는 다량의 데이터를 빠른 속도로 검색 가능

Ex) CREATE BITMAP INDEX 인덱스명 ON 테이블명 (컬럼1, 컬럼2);
Reverse-Key 인덱스

특정 블록에 대한 I/O의 집중을 피하기 위해 저장 시 데이터를 역으로 바꾸어 저장하고 조회 시 정상적으로 조회하는 인덱스

Ex) CREATE INDEX 인덱스명 ON 테이블명(컬럼1, 컬럼2) REVERSE;
Descending 인덱스

인덱스 구성 시 컬럼의 값을 Descending으로 구성하는 인덱스

복합 인덱스로서, 두 개 이상의 컬럼에 대해 서로 다른 순서의 결과가 필요한 경우 사용됨

Ex) CREATE INDEX 인덱스명 ON 테이블명(컬럼1, 컬럼2 DESC);

 

 

출처

DBMS의 이론과 실무 활용

'공대인 > DB' 카테고리의 다른 글

[ORACLE] 실행 계획에 의한 조인의 종류  (0) 2021.05.17
[ORACLE] SQL문 처리 과정  (0) 2021.03.06
[ORACLE] DBMS 구성요소  (0) 2021.02.28
DBMS란?  (0) 2021.02.28
Comments