Note/DB

Oracle Index

Delia :D 2011. 7. 20. 19:01
인덱스란?
테이블이나 클러스트에서 쓰여지는 선택적인 객체로서,
테이블 내의 원하는 레코드를 빠르게 차아갈 수 있도록 만들어진 데이터 구조
 
찾으려는 데이터를 찾아보기 쉽게 한다는 의미에서 보통 인덱스를 설명할 때는 책 뒷장의 '색인'에 비유를 많이 한다.
테이블의 값을 빠르게 액세스 하도록 하는 데이터 베이스 객체로써 SQL 구문 실행에 있어 성능(속도)향상을 기대할 수 있다.
그러나 잘못된 인덱스는 오히려 성능저하의 원인이 되므로 인덱스를 생성할 때는 신중히 하도록 하자.


자동 인덱스 : Primary Key 또는 Unique 제한 규칙에 의해 자동적으로 생성되는 인덱스
수동 인덱스 : CREATE INDEX 명령을 실행해서 만드는 인덱스

Index 를 생성하는 것이 좋은 컬럼
1.where 절이나 join조건 안에서 자주 사용되는 컬럼
2.null값이 많이 포함되어있는 컬럼
3.where절이나 join조건에서 자주 사요되는 두 개 이상의 컬럼들

Index 생성이 불필요한 경우
1.테이블이 작을때
2.테이블이 자주 갱신될때


오라클인덱스는 B-tree(binary search tree) 를 기반으로 하며,
물리적 구조가 좌우 대칭 구조를 이루고 있어 Balance-tree 라 한다.
 
B-tree 알고리즘
1.주어진값을 리스트의 중간점에 있는 값과 비교
그 값이 더 크면 리스트의 아래쪽 반을 버린다.
그 값이 작으면 위쪽 반을 버린다.
2.하나의 값이 발견될때까지 또는 리스트가 끝날때까지 같은 작업을 다른반대쪽에서도 반복한다.

인덱스의 분류
1.Bitmap 인덱스
비트맵 인덱스는 각 컬럼에 대해 적은 개수의 독특한 값이 있을 경우에 가장 잘 동작한다.
그러므로 비트맵 인덱스는 B-tree 인덱스가 사용되지 않을 경우에서 성능을 향상시킨다.
테이블이 매우 크거나 수정/변경이 잘 일어나지 않는 경우에 사용
Create Bitmap Index 인덱스명
On  테이블명(컬럼명);

2.Unique 인덱스
Unique 인덱스는 인덱스를 사용한 컬럼의 중복값들을 포함하지 않고 사용할 수 있다.
Primary Key 와 Unique 제약조건 시 생성되는 인덱스
Create Unique Index 인덱스명
On  테이블명(컬럼명);

 
3.Non-Unique 인덱스
Non-Unique 인덱스는 인덱스를 사용한 컬럼에 중복 데이터 값을 가질 수 있다.
Create Index 인덱스명
On  테이블명(컬럼명);

 
4.결합(Concatenated(=Composite)) 인덱스
복수개의 컬럼에 생성할 수 있으며 복수키 인덱스가 가질수 있는 최대 컬럼값은 16개
Create Unique Index 인덱스명
On  테이블명(컬럼명1, 컬럼명2);

 
인덱스의 삭제
인덱스의 구조는 테이블과 독립적이므로 인덱스의 삭제는
테이블의 데이터에는 아무런 영향도 미치지 않음
인덱스를 삭제하려면 인덱스의 소유자 이거나 Drop Any Index 권한을 가지고 있어야 한다.
index는 alter할수 없음


붙임 
인덱스를 사용 할때 해당 인덱스에 명시된 컬럼들이 where조건문에 모두 있어야 인덱스의 힘을 제대로 발휘할 수 있다.
인덱스에는 컬럼이 5개 인데 where절에서는 3개 뿐이라면 오히려 속도가 느려질 수 있으므로
꼭 필요한 컬럼만 인덱스를 생성하도록 하자.