인덱싱 기본

인덱스의 데이터 구조에서 값을 검색하면 그 항목이 포함된 행을 찾을 수 있습니다.

인덱스는 테이블에 있는 하나 이상의 열의 값을 포함합니다. 하나 이상의 열을 인덱싱하는 경우 MySQL은 인덱스의 맨 왼쪽 접두사에서만 효과적으로 검색할 수 있으므로 열 순서가 매우 중요합니다.

인덱스 유형

인덱스는 각 엔진마다 조금씩 다르게 작동하며 유형도 여러가지 입니다. MySQL이 지원하는 가장 일반적인 두 가지 인덱스 유형 및 장단점을 살펴보겠습니다.

B-트리 인덱스

  1. B-Tree는 데이터베이스의 인덱싱 알고리즘 가운데 가장 일반적으로 사용됩니다.
  2. B-Tree는 칼럼의 원래 값을 변형시키지 않고 인덱스 구조체 내에서는 항상 정렬된 상태로 유지합니다.

Untitled

B-트리 인덱스 특성

  1. 최상위에 하나의 루트노드와 중간의 브랜치노드, 최하위에 리프노드가 존재합니다.
  2. 데이터베이스에서 인덱스와 실제 데이터가 저장된 데이터는 따로 관리되는데, 인덱스의 리프노드는 항상 실제 데이터 레코드를 찾아가기 위한 주솟값을 가지고 있습니다.
  3. 인덱스의 키 값은 모두 정렬돼 있지만, 데이터 파일의 레코드는 정렬돼 있지 않고 임의의 순서로 저장돼 있습니다.
  4. InnoDB 스토리지 엔진에서는 모든 세컨더리 인덱스 검색에서 데이터 레코드를 읽기 위해서는 반드시 프라이머리 키를 저장하고 있는 B-Tree 를 다시 한번 검색해야 합니다.

B-Tree 인덱스 키 추가 및 삭제

1. 인덱스 키 추가

  1. B-Tree에 새로운 키가 저장될 때 B-Tree상의 적절한 위치를 검색합니다.
  2. 저장될 위치가 결정되면 레코드의 값과 대상 레코드의 주소정보를 B-Tree의 리프 노드에 저장합니다.
  3. 리프노드가 꽉 차서 더는 저장 할 수 없을 때는 리프노드가 상위 브랜치 노드까지 분리됩니다.(많은 비용이 듬)

2. 인덱스 키 삭제