article thumbnail image
Published 2020. 9. 21. 00:17

 

[ 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;

 

SAL 기준으로 내림차순 된 결과 조회

 

 

 

[ 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하는 작업을 하기 때문에 퍼포먼스가 떨어질 수 있다.

 

 

 

복사했습니다!