🌱 오늘의 주제 : 데이터베이스 - 인덱스
🌱 인덱스
- 인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치이다.
🌱 B-트리
- 인덱스는 보통 B-트리 자료 구조로 이루어져 있다.
- 루트 노드, 브랜치 노드, 리프 노드로 구성되어 있다.
🌱 인덱스가 효율적인 이유와 대수확장성
- 인덱스가 효율적인 이유는 효율적인 단계를 거쳐 모든 요소에 접근 할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문이다.
- 대수확장성이란 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 말한다.
- 기본적으로 인덱스가 한 깊이씩 증가 할때마다 최대 인덱스 항목의 수는 4배씩 증가한다.
🌱 인덱스 만드는 방법 - MySQL
- 클러스터형 (Cluster) 인덱스
- 클러스터형 인덱스는 데이블당 하나를 설정할 수 있다.
- Primary key 옵션으로 기본키를 만들면 클러스터형 인덱스를 생성할 수 있다.
- 기본키를 만들지 않고 unique not null 옵션을 붙이면 클러스터형 인덱스로 만들 수 있다.
- 하나의 인덱스만 생성하면 성능이 좋다.
- 세컨더리(Secondary) 인덱스
- create index ... 명령어를 기반으로 만든다.
- 보조 인덱스로 여러 개의 필드 값을 기반으로 쿼리를 많이 보낼 때 생성해야 하는 인덱스이다.
🌱 인덱스 최적화 기법
- 인덱스는 비용이다.
- 인덱스는 두 번 탐색하도록 강요한다.
- 인덱스 리스트, 컬렉션 순으로 탐색하기 때문에, 관련 읽기 비용이 든다.
- 컬렉션이 수정되었을 때 인덱스도 수정되어야 한다.
- 컬렉션에서 가져와야 하는 양이 많을 수록 인덱스를 사용하는 것이 비효율적이다.
- 항상 테스팅하라.
- 인덱스 최적화 기법은 서비스 특징에 따라 달라진다.
- explain() 함수를 통해 인덱스를 만들고 쿼리를 보낸 후, 테스팅하며 걸리는 시간을 최소화해야 한다.
- 복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순이다.
- 1. == 이나, equal이라는 쿼리가 있다면 제일 먼저 인덱스로 설정한다.
- 2. 정렬에 쓰는 필드라면 그 다음 인덱스로 설정한다.
- 3. 쿼리가 >, < 등 많은 값을 출력해야 하는 경우에는 나중에 인덱스를 설정한다.
- 4. 유니크한 값의 정도를 카디널리티라고 한다. 이 카디널리티가 높은 순서를 기반으로 인덱스를 생성해야 한다. 예) age, email 중 email 필드를 인덱스에 먼저 생성해야 한다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
데이터베이스 - 트랜잭션이란? (0) | 2023.07.03 |
---|---|
데이터베이스 - 데이터베이스란? (0) | 2023.07.03 |