본문 바로가기

공부 기록/영상 후기

DB 인덱스(DB index) !! 핵심만 모아서 설명합니다 !!

https://youtu.be/IMDH4iAQ6zM

DB에서 Index를 쓰는 이유

- 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해. 빠르게 정렬하거나 그룹핑하기 위해

CREATE INDEX 인덱스명 ON 테이블명 (컬럼명);
CREATE UNIQUE INDEX 인덱스명 ON 테이블명 (컬럼1, 컬럼2);

SHOW INDEX FROM 테이블명; # 인덱스 조회

PK에서는 인덱스가 자동 생성된다.

  

사용되는 쿼리에 맞춰서 적절하게 인덱스를 걸어줘야 쿼리가 빠르게 처리될 수 있다.

EXPLAIN SELECT ~; ===> 사용 가능한 키(인덱스)와 실제 사용한 키(인덱스)를 보여준다.

DB의 optimizer가 적절하게 인덱스를 선택해준다.

  

특정 인덱스를 사용하도록 명시하고 싶다면?

- SELECT * FROM 테이블명 USE INDEX (인덱스명) WHERE ~;

- SELECT * FROM 테이블명 FORCE INDEX (인덱스명) WHERE ~;

특정 인덱스를 제외하고 싶다면?

- SELECT * FROM 테이블명 IGNORE INDEX (인덱스명) WHERE~;

  

불필요한 인덱스를 만들면 안되는 이유

인덱스 생성 시 해당 인덱스에 맞는 부가적인 데이터도 생성된다.

- 테이블에 write할 때마다 인덱스도 변경 발생(오버헤드 발생)

- 추가적인 저장 공간 차지

  

Covering Index

조회 시 해당 데이터가 인덱스에 있는 attribute로 모두 커버될 때. 조회 성능이 더 빠름

  

Hash Index

hash table을 사용하여 인덱스 구현. 시간복잡도는 O(1)

단점 : rehashing에 대한 부담. equality(==, !=) 비교만 가능, range 비교 불가. multicolumn index의 경우 전체 attributes에 대한 조회만 가능

  

Full scan이 더 좋은 경우

- 테이블에 데이터가 조금 있을 때

- 조회하려는 데이터가 테이블의 상당 부분을 차지할 때