데이터베이스
오라클 SQL / 인덱스(INDEX)
LWM
2020. 5. 6. 14:14
반응형
*인덱스란
도서의 색인이나 사전과 같이 데이터를 쉽게 빠르게 찾을 수 있도록 만든 데이터 구조이다.

*인덱스의 특징
- 인덱스는 테이블에서 한 개 이상의 속성을 이용하여 생성함
- 빠른 검색과 함께 효율적인 레코드 접근이 가능함
- 순서대로 정렬된 속성과 데이터의 위치만 보유하므로 테이블보다 작은 공간을 차지함
- 저장된 값들은 테이블의 부분집합이 됨
- 일반적으로 B-tree형태의 구조를 가짐
- 데이터의 수정, 삭제 등의 변경이 발생하면 인덱스의 재구성이 필요함
*오라클 B-tree 인덱스
오라클 인덱스는 B-tree를 변형하여 사용한다.

*오라클 인덱스의 종류
- B-Tree인덱스
- 오라클에서 사용하는 기본적인 인덱스, 하나의 리프노드는 하나의 데이터에 대응
ex) CREATE INDEX t_ix ON T(key1); - IOT(Index Organized Table, 인덱스 구조 테이블)
- B*Tree구조로 키 값이 정렬되면서 인덱스 리프노드에 실제 데이터가 같이 저장되는 테이블(인덱스+테이블 일체)
ex) CREATE TABLE T (key1 NUMBER, BDATA VARCHAR2(10)) ORGANIZATION INDEX; - Bitmap Index
- 비트-맵을 사용하여 하나의 엔트리가 여러 행을 가르킬 수 있도록 생성
ex) CREATE BITMAP INDEX bt_ix ON Emp(gender); - Function-Base Index
- 행과 열에 대한 함수의 결과를 저장한 인덱스
ex) CREATE INDEX fbi_ix ON T(UPPER(name));
*인덱스 생성 시 고려사항
- 인덱스는 WHERE절에 자주 사용되는 속성이어야한다.
- 인덱스는 조인에 자주 사용되는 속성이어야한다.
- 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있다.(테이블 당 4~5개 권장)
- 속성이 가공되는 경우 사용하지 않음
- 속성의 선택도가 낮을 때 유리함(속성의 모든 값이 다른 경우
*인덱스의 생성 문법
CREATE [REVERSE] | [UNIQUE] INDEX 인덱스이름]
ON 테이블이름 (컬럼 [ASC | DESC] [{컬럼 [ASC | DESC]} ....])[;]


*인덱스의 재구성 문법
ALTER [REVERSE] [UNIQUE] INDEX 인덱스이름
[ON {ONLY} 테이블이름 {컬럼이름 [{컬럼이름} ...])] REBUILD[;]

*인덱스 삭제 문법
DROP INDEX 인덱스이름

*인덱스 정렬하기

빨간박스처럼 코드를 주면 인덱스는 차례로 정렬이된다. ORDER BY랑 비슷하다고 보면되는데,
여기서 짚고 넘어가야할점은 SQL에서는 ORDER BY를 지양하는것이 좋고 위와 같이 INDEX를
활용하여 정렬을 사용하는것을 권장한다.
반응형