[Oracle SQL] Index 란? (ft. 뭐든 과하면 독이다)

인덱스란 ?

  • 데이터를 빠르게 찾기 위한 도구
  • 오라클에서 자동 생성 또는 개발자가 직접 생성
  • 단, 인덱스 또한 생성의 개념이므로 디스크 공간을 차지함 -> 의미 없는 인덱스를 많이 만들면 오히려 안 쓰는게 더 빠름

이점 ?

  • where 조건 검색시에 속도가 빠름
  • 정렬 속도가 향상됨 (order 절)
  • 중복 제거 속도 향상 (DISTINCT , GROUP 절)

단점 ?

  • insert , update, delete 의 경우 오히려 더 느려짐
  • 인덱스 생성 -> 디스크 공간 차지로 이어짐 (느려지는 문제로 이어짐)

인덱스는 언제 쓸까 ??

  • 조회 중심의 테이블인 경우
  • 조인 조건으로 걸리는 컬럼
  • where 조건 절에 자주 들어가는 컬럼

인덱스 유의 사항

  1. UPPER 쓰면 인덱스가 동작 안 해요... (프론트단에서 해결해줘야해요)
  2. LIKE 절의 와일드카드 (%)가 앞에 있으면 인덱스가 동작 안 해요
  3. OR 조건시 인덱스가 동작 안 할 수도 있어요
  4. 인덱스를 타는지 꼭 AUTOTRACE 를 통해 확인

인덱스의 오해

  1. 인덱스는 꼭 pk 여야한다 (단, 반복되는 값이 적을수록 + 조인에 자주들어가는 컬럼일수록 인덱스 효과가 발휘되어서 pk가 유리할 뿐)
  2. 인덱스가 많을수록 속도가 빠르다 (디스크 낭비 + 조회를 제외한 insert update delete 에선 불리)