데이터를 빠르게 찾을 수 있게 해줌
인덱스는 보통 B-트리라는 자료 구조로 이루어져 있음
루트 노드, 리프 노드, 그 사이에 있는 브랜치 노드로 나뉨
트리 탐색은 정렬된 값을 기반으로 맨 위 루트 노드부터, 브랜치 노드를 거쳐, 리프 노드까지 내려오며 이루어짐
마지막 리프 노드에 도달해서 57이 가리키는 데이터 포인터를 통해 결괏값을 반환함
모든 요소에 접근할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문
대수확장성: 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것
기본적으로 인덱스가 한 깊이씩 증가할 때마다 최대 인덱스 항목의 수는 4배씩 증가
클러스터형 인덱스와 세컨더리 인덱스가 있음
primary key
옵션으로 기본키를 만들거나, unique not null
옵션을 붙이면 클러스터형 인덱스로 만들 수 있음create index ...
명령어를 기반으로 생성하나의 인덱스만 생성할 것이라면 클러스터형 인덱스를 만드는 것이 성능이 좋음
도큐먼트를 만들면 자동으로 ObjectID가 형성되며, 해당 키가 기본키로 설정됨
세컨더리키도 부가적으로 설정해서 기본키와 세컨더리키를 같이 쓰는 복합 인덱스를 설정할 수 있음
EXPLAIN
SELECT * FROM t1
JOIN t2 ON t1.c1 = t2.c1