생성해야 하는 경우
외래키가 사용되는 열에는 인덱스를 생성해주는 것이 좋다.
(이유: 참조 키를 빠르게 확인하고 테이블 full 스캔을 하지 않기 위해서.)
JOIN에 자주 사용되는 열에는 인덱스를 생성해주는 것이 좋다.
(이유: 조인을 설정할 때는 조인을 하려는 값에
인덱스를 걸어줘야, 속도가 빨라진다.)
생성하지 않아야 하는 경우
주의사항
INSERT
[기존 블록에 여유 공간이 없는 상황에서]
추가로 새로운 블록을 할당 받고 복잡한 작업들을 수행하게 되면
(모든 수행 과정은 Redo에 기록 -> 많은 양의 Redo를 유발.)
->성능저하
DELETE
일반적으로 table에서 데이터를 delete 하면 값이 지워지지만,
이와 다르게 index에서는 데이터를 delete 할 경우 데이터가 지워지지 않고
사용 안 됨 표시만 해 둔다.
[ 테이블에 데이터가 1만 건 있는 경우, ]
인덱스에는 2만 건이 있을 수 있다 는 뜻
UPDATE
일반적으로 table에서 데이터를 update 하면 delete 후에 insert 작업이 진행되지만,
index에서는 update가 발생할 경우 delete와 insert 두 개의 작업이
동시에 일어 남.
다른 DML보다 더 큰 부하를 주게 됨.
*옵티마이저: SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해 주는 DBMS내부 핵심엔진
[인덱스는 양날의 검]