인덱싱 기본
인덱스의 데이터 구조에서 값을 검색하면 그 항목이 포함된 행을 찾을 수 있습니다.
인덱스는 테이블에 있는 하나 이상의 열의 값을 포함합니다. 하나 이상의 열을 인덱싱하는 경우 MySQL은 인덱스의 맨 왼쪽 접두사에서만 효과적으로 검색할 수 있으므로 열 순서가 매우 중요합니다.
인덱스 유형
인덱스는 각 엔진마다 조금씩 다르게 작동하며 유형도 여러가지 입니다. MySQL이 지원하는 가장 일반적인 두 가지 인덱스 유형 및 장단점을 살펴보겠습니다.
B-트리 인덱스
- B-Tree는 데이터베이스의 인덱싱 알고리즘 가운데 가장 일반적으로 사용됩니다.
- B-Tree는 칼럼의 원래 값을 변형시키지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지합니다.

B-트리 인덱스 특성
- 최상위에 하나의
루트노드
와 중간의 브랜치노드
, 최하위에 리프노드
가 존재합니다.
- 데이터베이스에서 인덱스와 실제 데이터가 저장된 데이터는 따로 관리되는데, 인덱스의 리프노드는 항상 실제 데이터 레코드를 찾아가기 위한 주솟값을 가지고 있습니다.
- 인덱스의 키 값은 모두 정렬돼 있지만, 데이터 파일의 레코드는 정렬돼 있지 않고 임의의 순서로 저장돼 있습니다.
- InnoDB 스토리지 엔진에서는 모든 세컨더리 인덱스 검색에서 데이터 레코드를 읽기 위해서는 반드시 프라이머리 키를 저장하고 있는 B-Tree 를 다시 한번 검색해야 합니다.
B-Tree 인덱스 키 추가 및 삭제
1. 인덱스 키 추가
- B-Tree에 새로운 키가 저장될 때 B-Tree상의 적절한 위치를 검색합니다.
- 저장될 위치가 결정되면 레코드의 값과 대상 레코드의 주소정보를 B-Tree의 리프 노드에 저장합니다.
- 리프노드가 꽉 차서 더는 저장 할 수 없을 때는 리프노드가 상위 브랜치 노드까지 분리됩니다.(많은 비용이 듬)
2. 인덱스 키 삭제