이번에는 인덱스 종류에 대해서 먼저 살펴볼 것이다. 인덱스는 다양한 종류가 있는데 우선 모든 DBMS 가 B* Tree 를 기본적으로 제공한다.
가. B* Tree 인덱스
몇가지 조건을 통해서 BALANCED된 상태로 유지시켜주는 자료구조이다.
B* Tree 의 인덱스는 B 인 Balanced 의 약자로서 인덱스 루트에서 리프 노드까지 어떤 값으로 탐색하더라도 같음을 의미한다.
루프로부터 모든 리프 블록까지의 높이가일정하다.
하지만 Index Skew 또는 Sparse 현상이 생기는 경우가 있다. 이는 인덱스 효율에 좋지 않는 구조를 보여준다.
* Index Skew : 인덱스 엔트리가 왼쪽 또는 오른쪽에 치우치는 현상을 말함. 왼쪽 에 있는 인덱스 엔트리가 empty 고 오른쪽에 있는 인덱스 엔트리는 가득 찼을 때도 의미..
But SQL 에서는 자동으로 이를 해결해줌
* Index parse : 인덱스 Sparse 는 인덱스 전반적으로 밀도 ( density) 가 떨어지는 현상을 의미함.
나. 비트맵 인덱스
Oracle 은 비트맵 ( Bitmap) 인덱스 구조를 제공한다. 상품 테이블에 10개 레코드 있고 색상으로는 이제 입력되면 해당 색상으로 이제 보여질 수 있도록 되어 있음.
다. 함수기반 인덱스
Oracle 이 제공하는 함수기반 인덱스는 칼럼 값 자체가 아닌 칼럼에 특정 함수를 적용한 값으로 B* Tree 인덱스를 만든다.
select *
from 주문
where nvl ( 주문수량, 0 ) <100
주문수량 칼럼에 인덱스가 있어도 위처럼 인덱스 컬럼을 가공하면 정상적인 인덱스 사용이 불가능하다. 하지만 조건절과 똑같이 NVL 함수를 씌워 아래처럼 인덱스를 만들면 정상적인 인덱스 사용이 가능.
create index emp_x01 on emp ( nvl ( 주문수량, 0 )) ;
'이유's Programming > DBMS' 카테고리의 다른 글
다중 행 서브 쿼리 (0) | 2021.04.19 |
---|---|
SQL 쿼리 - group by / having (0) | 2021.04.06 |
[ 4 -2 ] 인덱스 스캔 방식 - (0) | 2021.03.25 |
[ 4 -1 ] 인덱스 기본 원리 / Balanced Tree ( B Tree) (4) | 2021.03.24 |
SQL 연산자 (0) | 2021.03.23 |