인덱스의 종류 및 개념
<종류>
B*TREE 인덱스, 비트맵 인덱스, REVERSE KEY 인덱스, 함수 기반 인덱스(FUNCTION BASED INDEX)
어떤 인덱스를 사용하냐에 따라서 성능이 달라짐.
<개념>
1. 하나의 테이블에는 여러 개의 인덱스 생성 가능
2. 동일한 구성(컬럼종류, 컬럼순서)으로 중복 인덱스 생성 불가
3. 여러 가지 형태의 인덱스 존재(B*TREE, 비트맵 등)
인덱스는 DML의 성능 향상을 위해서 존재
<인덱스의 단점>
DML 성능 저하
잘못된 인덱스 선정은 스토리지 낭비유발
조회 성능 저하
DML의 SELECT가 아닌 DELETE , UPDATE도 WHERE의 조건으로 SELECT 기능을 수행한다.
* 테이블의 존재하는 데이터의 3%미만에 데이터를 가져올때는 INDEX로 가져오는 것이 더욱 효율적이고
그 이상의 데이터 조회시 INDEX를 생성하지 않고 풀스캔으로 가져오는것이 효율적이다.
인덱스를 생성시 자원 디스크공간에 따로 저장됨.
인덱스를 무분별하게 생성할 경우 해당 테이블보다 용량이 많아지는 경우 존재 또는 인덱스 용량이 하드용량을 초과할수 있음
그렇기 때문에 잘못된 인덱스 선정은 스토리지 낭비유발
<인덱스 조회의 기본 원리>
DML -> INDEX 액세스 -> 랜덤엑세스 (일반테이블 조회)
인덱스 생성시 ROWID가 부여되며 SELECT시 WHERE절의 조건에 컬럼이 INDEX가 존재한다면 INDEX 조회하여 해당 ROWID를 통해 테이블을 조회하여 데이터를 가져온다.
이것을 랜덤엑세스라고 한다.
* WHERE절에 INDEX가 존재하더라도 INDEX가 생성되지 않을수 있다.
ex) 인덱스 컬럼에 함수를 적용할 경우
평균적으로 B*TREE 인덱스를 가장 많이 사용한다.