[ FBI Index ]
함수 기반 인덱스
CREATE INDEX idx_sal_fbi
ON emp(sal);
-- sal 인덱스를 사용하지 않은 조건 => index suppressing error
SELECT ename FROM emp
WHERE sal+200 = 1000;
-- 속도 빠르다 ~~~
CREATE INDEX idx_sal_fbi1
ON emp(sal+200);
SELECT 문을 통해 sal + 200 을 조건으로 검색하고자 할 때,
idx_sal_fbi 인덱스와 같이 sal 을 기준으로 생성하면 해당 인덱스를 사용하지 않게 된다.
=> Index Suppressing Error
=> sal+200 을 기준으로 인덱스를 재생성
[ Descending Index ]
내림차순 인덱스
CREATE INDEX idx_desc
ON emp2(sal desc);
- WHERE 절 없이 조회했을 때
SELECT * FROM EMP2 e;
- Index 사용해서 조회
SELECT * FROM EMP2 e
WHERE sal > 800;
[ Composit Index ]
결합 인덱스 : 2개 이상의 컬럼으로 인덱스 생성
-- 순서가 중요한 역할!
-- 오름차순으로 job이 정렬되고, deptno 찾는 형태
CREATE INDEX idx_job_deptno
ON emp2(job, deptno);
SELECT * FROM EMP2 e
WHERE job > '0'
AND deptno > 0;
JOB -> DEPTNO 의 순으로 오름차순 정렬 되어있는 것을 확인할 수 있다.
SELECT ENAME, JOB, DEPTNO
FROM EMP2 e
WHERE JOB = 'MANAGER'
AND DEPTNO = 20;
만약 위와 같은 데이터를 찾는다면,
JOB 으로 오름차순 정렬 후 그 안에서 DEPTNO 로 정렬하기 때문에
10번만에 데이터 찾아오는 것
이번에는 인덱스의 컬럼 순서를 바꿔보자
-- 인덱스 삭제
DROP INDEX idx_job_deptno;
-- 새로 생성
CREATE INDEX idx_job_deptno
ON emp2(deptno, job);
13번만에 데이터를 찾게되는 것!
=> 결합 인덱스는 순서에 따라 퍼포먼스에 차이가 있다.
[ Bitmap Index ]
비트맵 인덱스
데이터 값의 종류가 적고 동일한 데이터가 많을 경우에 주로 사용 ( ex. 남/여 : 남자는 0 여자는 1 로 비트맵 형식 )
B-tree 인덱스의 경우는 데이터 값의 종류가 많고 데이터가 적을 경우에 사용
=> 해당 데이터가 있는 자리는 1, 나머지 행은 0
=> 새로운 데이터가 있을 시 비트맵을 다시 생성해야하는 단점이 있지만 퍼포먼스가 매우 좋다.
CREATE bitmap INDEX [ Index Name ]
ON [ Table Name ]( Column Name );
[ 인덱스 사용 시 주의 사항 ]
인덱스를 생성하면 퍼포먼스가 좋아진다 (?)
=> 상황에 따라 Table Full Scan 보다 느려질 수도 있음.
=> DML 사용 시 취약점에 유의하자.
- Insert
기존에 할당 된 블록 내에 저장할 영역이 없을 때,
정렬 된 상태의 기존에 있던 블럭 사이에 Insert해야 하기때문에
기존 데이터 이동, 새로운 블럭 할당 등의 불필요한 작업이 생성될 수 있음
한 번에 해야할 일을 삭제, 생성 반복해야함
=> Index Split : Block 이 2개로 split됨
- Delete
인덱스는 데이터를 사용하지 않음으로 표시하고 지우지는 않는다.
100개 중 50개의 데이터를 지웠을 때 인덱스 내의 반 이상이 사용하지 않는 데이터일 확률이 있는 것
- Update
인덱스에서는 Delete 후 새로운 데이터를 Insert하는 작업을 하기 때문에 퍼포먼스가 떨어질 수 있다.
'SQL' 카테고리의 다른 글
[Oracle] Index 인덱스의 이해 1 (0) | 2020.08.27 |
---|---|
[Oracle] 트리거 Trigger, DML Trigger (0) | 2020.08.27 |
[Oracle] PL/SQL Package 패키지의 이해 (0) | 2020.08.07 |
[Oracle] PL/SQL 함수 Function (0) | 2020.07.26 |
[Oracle] PL/SQL 서브 프로그램의 이해, 프로시저 (0) | 2020.07.26 |