Database초보우낙

4. 같은 컬럼에 여러개의 인덱스를 생성할 수 있다(12c) 본문

oracle 12c

4. 같은 컬럼에 여러개의 인덱스를 생성할 수 있다(12c)

오운학 2024. 4. 26. 15:25

데이터 베이스 저장구조에 대해 설명

인덱스의 종류가 뭐가 있나요?
1. b-tree 인덱스 : tree구조로 구성된 기본 인덱스
2. bitmap 인덱스 : 0과 1인 bitmap으로 leaf 블럭이 구성된 인덱스
3. reverse key 인덱스 : btree 인덱스를 사용했을 때 어느 하나의 인덱스 블럭에 i/o 가 집중되어서 인덱스 검색 성능이 떨어질때 유용한 인덱스
4. function base 인덱스 : where 절의 계산식 또는 함수가 포함된 컬럼 자체에 거는 인덱스

 

인덱스의 구조

■ 실습 (scott 에서 실습)
#1. 사원 테이블에  이름에 인덱스를 생성하시오 !

create index emp_ename on emp(ename);


#2. 사원 테이블의 이름에 인덱스를 전체 스캔하시오 !

# ename이 공백보다 클 경우 출력
select ename
from emp
where ename > ' ';

-> A~Z순서내로 정렬되어 출력된다


#3. 사원 테이블에 이름에 인덱스를 삭제하시오 !

drop index emp_ename;


#4. 사원 테이블에 이름에 reverse 인덱스를 생성하시오!

create index emp_ename_reverse
on emp(ename) reverse;

-> ename을 인덱스 블럭에 저장할 때 btree와 다르게 ABCD순서대로 저장하지 않습니다.

    이름의 끝철자를 기준으로 ABCD순으로 정렬합니다


#5. 사원 테이블에 이름에 걸인 reverse  key 인덱스를 전체 스캔하시오!

# ename이 공백보다 클 경우 출력
select ename
from emp
where ename > ' ';

-> 이름의 끝 철자를 기준으로 ABCD 순으로 저장되어있다

그래서 이름이 A로 시작하는 사원들을 검색하는 유저들이 많아서 특정 인덱스 블럭에 I/O가 집중되서 성능이 떨어질 우려가 있을때 Reverse Key 인덱스로 생성하면 I/O가 분산된다.

 

※12C는 단일 컬럼에 대해서 여러개의 인덱스를 동시에 생성할 수 있습니다.

11g는 이게 안됐다. 컬럼한개에 인덱스 한개만 생성할 수 있었다.

 


■ 실습 :

#1. 사원테이블에 이름에 인덱스를 DROP

<인덱스 조회>
select index name
 from user_indexes
 where table_name='EMP';
 
<인덱스 삭제>
drop index emp_ename_reverse;

 

#2. 사원테이블에 이름에 B-tree 인덱스를 생성

create index emp_ename on emp(ename);

#3. 사원 테이블에 이름에 bitmap인덱스를 생성

bitmap 인덱스는 중복된 데이터가 많을 때 검색속도가 빠르다

create bitmap index emp_bit_ename on emp(ename);

 

 

 

------미완성-----추가보충예정