본문 바로가기

Til

인덱스

인덱스의 필요성 

  • 데이터를 빠르게 찾을 수 있는 하나의 장치
  • 인덱스를 설정하면 테이블 안에 내가 찾고자 하는 데이터를 빠르게 찾을 수 있다.

인덱스 최적화 기법

<MongoDB 기준으로 설명함>

1. 인덱스는 비용이다.

  • 인덱스는 두 번 탐색하도록 강요 - 인덱스 리스트, 컬렉션 순으로 탐색하기 때문에 읽기 비용이 든다.
  • 컬렉션이 수정되었을 때 인덱스도 수정되어야 한다.
  • B-tree의 높이를 균형있게 조절하는 것도 비용이 들고, 데이터를 분산시키는 비용도 든다.
  • 따라서 모든 필드에 인덱스를 설정하는 것은 효율적이지 않다.
  • 컬렉션에서 가져와야 하는 데이터의 양이 많을 수록 인덱스를 설정하는 것은 비효율적이다.

2. 항상 테스팅하라.

  • 최적화 기법은 서비스마다 다르기 때문에 객체의 깊이, 테이블의 양에 따라 항상 테스팅하는 것이 중요하다.
<MySQL 테스팅 코드>
    
EXPLAIN
SELECT * FROM t1
JOIN t2 ON t1.c1 = t2.c1

3. 복합인덱스는 같음 - 정렬 - 다중 값 - 카디널리티 순이다.

==, equal 쿼리가 있으면 제일 먼저 인덱스로 설정

정렬에 쓰는 필드는 그 다음으로 설정

다중 값을 출력해야 하는 필드, 즉 쿼리 자체가 "이거나" 등 많은 값을 출력해야 하는 쿼리의 필드라면 나중에 인덱스 설정

카디널리티 = 유니크한 값의 정도 / 카디널리티가 높은 순으로 인덱스를 생성해야 함 - ex ) age and email

'Til' 카테고리의 다른 글

프로메테우스, 그라파나  (0) 2023.02.12
복잡도  (0) 2023.02.12
데이터 베이스의 종류  (1) 2023.01.22
정규화와 트랜젝션  (0) 2023.01.21
프로세스와 스레드  (1) 2023.01.14