인덱스의 필요성
- 데이터를 빠르게 찾을 수 있는 하나의 장치
- 인덱스를 설정하면 테이블 안에 내가 찾고자 하는 데이터를 빠르게 찾을 수 있다.
인덱스 최적화 기법
<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 |