[ORACLE]DB INDEX, 인덱스의 개념
1. 인덱스 정의
어떠한 데이터가 저장소 즉 하드 디스크에 어느 위치에 저장되어있는지 위치 정보를 가진 주소록 같은 개념이다. 이러한 인덱스가 존재한다면 DML을 실행하였을 때 보다 빠른 쿼리 검색이 가능해진다.
2. 인덱스 생성의 개념 및 원리
Table Full Scan(모든 테이블 스캔 à PGA내의 Sort Aread서 Sort정렬 공간 부족시 Temporary tablespace를 이용해 정렬 후 -> HDD Block에에 기록 즉 인덱스는 데이터가 정렬되어 들어간다.
3. 인덱스의 구조와 작동 원리(B-Tree 방법 기준 )
테이블 인덱스
테이블은 컬럼이 여러 개, 데이터가 정렬되지 않고 입력된 순서대로 들어간다
인덱스는 컬럼이 Key컬럼(사용자가 인덱스를 지정하라고 지정한 컬럼)과 ROWID컬럼 두개로 이루어져 있다. (오름차순, 내림차순 정렬 가능)
EX) SELECT * from index_test where num = 100;
만약 사용자가 데이터가 100만건이 있는 테이블의 데이터를 위와같이 SELECT문으로 조회하였을 때 먼저 서버 프로세스가 구문파싱 과정을 거친 후 DB Buffer Chache에 num가 100인 정보가 있는지 먼저 확인후 만약 해당 정보가 없다면 100이라는 정보를 가진 블록을 찾아서 DB buffer chache로 가져온 후 해당 정보를 사용자에게 보여주게 된다.
1) Index 존재 -> where절의 조건으로 준 컬럼이 index의 Key로 생성되어있는지 확인후 인덱스에 먼저가서 100이라는 정보가 어떤 ROWID를 가지고 있는지 해당 ROWID에 있는 블록에 있는 데이터만 조회하여 DB Buffer Chache에 복사 후 사용자에게 보여지게 된다.
2) Index X -> 100이라는 데이터가 어떠한 위치에 있는지 위치 정보를 모르기 때문에 100만건에 대한 정보를 모두 읽게된다. 즉 100만건을 모두 DB buffer cache에 복사 후 Full Scan 방법으로 하나하나 읽으며 100 값을 찾게 된다.