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 값을 찾게 된다.
'Oracle' 카테고리의 다른 글
[Oracle]여러개 테이블 COUNT(*)하는 방법 (3) | 2021.09.09 |
---|---|
[Oracle] 쿼리 실행속도 측정방법 (0) | 2021.09.01 |
[Oracle]ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다. 해결방법 (8) | 2021.08.31 |
[Oracle]DB에서 insert for문 작성 (0) | 2021.08.31 |
[Oracle]Oracle DB링크 데이터 조회방법 (0) | 2021.08.25 |