DATABASE(oracleDB 11g)/SQL

[SQL]INDEX의 기초

SEUNGSAMI 2019. 2. 14. 10:52

INDEX의 기초



INDEX란 포인터를 사용하여 행 검색 속도를 높일 수 있는 스키마 객체이다.

INDEX를 사용할 경우 테이블의 COLUMN에 직접 빠르게 엑세스할 수 있는데, 그 이유는

INDEX는 INDEX화된 경로를 사용하여 데이터를 신속하게 찾기 때문에 디스크 I/O를 줄여주기 때문이다.


ROWID : 행에 저장된 데이터의 논리적인 주소값

1
2
SELECT ROWID, E.*
FROM EMP E;
cs


이것을 조금 활용하면

1
2
3
4
SELECT ROWID, E.*
FROM EMP E
WHERE ROWID = 'AAAE+oAAAAAAAETAAF';
--INDEX보다 값을 더 빠르게 찾는 방법 : 어느 주소에 있는 값을 가져오라는 뜻이다.
cs

위와 같이 사용가능하다.


하지만 이경우, 우리가 ROWID값을 하나하나 복사 할 수는 없으므로

INDEX를 사용한다.


인덱스를 생성하는 구문은 아래와 같다.

1
2
CREATE [UNIQUE][BITMAP]INDEX index
ON table (column[, column]...);
cs


 구문

설명

index

인덱스 이름

table

테이블 이름 

column

인덱스화될 열 이름



INDEX는 두가지로 구분된다.


유형

설명

고유인덱스

테이블 정의시 COLUMN이 PK 또는 UNIQUE의 속성을 가질경우 자동으로 생성된 인덱스이다.

비고유인덱스

수동으로 유저가 생성하는 인덱스이다 


INDEX는 많은 양의 데이터에서 극히 소량의 데이터를 찾을경우 사용하면 된다.


주의할 점으로는 INDEX가 많다고 좋은 것은 아니다. INDEX의 갱신은 DML작업후 COMMIT을 하는 과정에서 이루어지는데, 인덱스가 많을경우 서버에 부담이 갈 수가 있다.



SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL]정규식 함수의 기초  (0) 2019.02.14
[SQL]동의어 기초  (0) 2019.02.14
[SQL]SEQUENCE(시퀀스)의 기초  (0) 2019.02.14
[SQL]EXISTS 의 보충  (0) 2019.02.11
[SQL]서브쿼리(SUBQUERY)의 종류  (0) 2019.02.08