DB 인덱스(DB index) !! 핵심만 모아서 설명합니다 !! (31분이 아깝지 않을 겁니다)

KIM YONG GU·2023년 10월 15일
0

쉬운코드

목록 보기
12/18

index가 중요한 이유

index가 없다면 시간 복잡도는 O(N) - full scan
index가 걸려 있다면 O(logN) (B-tree based index)

index 거는 법

CREATE INDEX 또는 CREATE UNIQUE INDEX 사용.

INDEX 정보 확인 쿼리 : SHOW INDEX FROM 테이블명.

index 동작 방법 (B-tree 기반 테이블 기준)

싱글 컬럼 인덱스

ptr은 포인터의 약자.
이 테이블은 a에 대해 인덱스가 생성되어 있으며 ptr은 실제 테이블의 튜플을 가리킨다. (연결고리)

조건을 만족하는 튜플은 조건에 따라 녹색 기준점 전후에 존재할 수 있다.

멀티 컬럼 인덱스

a, b, ptr 존재.
이 경우는 왼쪽 값 a를 기준으로 오름차순 정렬.

의도에 맞지 않은 index 생성은 비효율적이거나 오히려 검색 성능(속도)을 저하시킬 수 있다.

쿼리가 어떤 인덱스를 쓰는지 확인하기

  • EXPLAIN은 현재 테이블의 인덱스를 확인할 수 있다.
  • 일반적으로 index는 DBMS에서 optimizer가 알아서 선택하는데, 자동 입력값이 원래 의도와 다르게 작동하고 있을 수 있다.
  • 이 때는 USE_INDEX를 이용하여 DBMS에게 권장값을 전달한다.

  • USE INDEX는 DBMS에게 권장 인덱스 제안.
  • FORCE INDEX는 DBMS에게 강한 뉘앙스로 인덱스를 제안하는 것. (강제)
  • 그러나 DBMS가 판단하기에 유저 입력 FORCE INDEX를 사용하면 데이터를 못 찾을거 같으면 FULL SCAN을 실시한다.
  • 특정 인덱스를 제외하고 싶다면 IGNORE INDEX를 사용.

index는 막 만들어도 괜찮을까?

Covering index란?

Hash index에 대하여

*하단 3개는 단점임

Full scan이 더 좋은 경우

그 외

수백만건 이상 테이블에 인덱스를 생성하는 경우에는 트래픽이 적은 새벽시간 등을 추천한다.

주의 사항

profile
Engineer, Look Beyond the Code.

0개의 댓글

관련 채용 정보