MySQL 인덱스의 내부 작동은 데이터를 효율적으로 검색하기 위해 트리 구조로 구성되어 있습니다.
일반적으로 B-Tree 인덱스가 사용되며, 이를 예시를 통해 자세하게 설명해보겠습니다.
가정해보겠습니다.
'사용자' 테이블에는 '사용자 ID'와 '이름' 열이 있습니다.
'이름' 열에 B-Tree 인덱스를 생성했다고 가정해봅시다.
1. 인덱스 키 생성:
MySQL은 '이름' 열의 값을 가져와 해당 값을 기준으로 인덱스 키를 생성합니다.
예를 들어, '이름' 열의 값이 'John'인 행을 찾을 때는 'John'을 인덱스 키로 사용합니다.
2. 인덱스 트리 구조:
인덱스는 트리 구조로 저장됩니다.
B-Tree 인덱스의 경우, 여러 노드로 구성된 균형 잡힌 트리로 데이터를 저장합니다.
각 노드는 여러 개의 키와 해당 키에 대한 포인터로 구성됩니다.
3. 인덱스 트리의 정렬:
B-Tree 인덱스는 키 값을 기준으로 정렬되어 있습니다.
예를 들어, '이름' 열의 인덱스는 알파벳순으로 정렬됩니다.
4. 데이터 검색:
쿼리에서 '이름'이 'John'인 사용자를 찾기 위해 인덱스를 사용하려면 다음과 같은 과정이 진행됩니다:
- 인덱스 트리의 루트 노드부터 시작하여 키 값을 비교합니다.
- 'John'이라는 값이 현재 노드의 키 범위에 있는지 확인합니다. 키 값이 범위에 속하면 해당 노드로 이동합니다.
- 일치하는 키가 있는 노드에 도달하면 해당 키에 대한 포인터를 따라 원본 테이블의 해당 행을 찾습니다.
5. 인덱스의 이점:
인덱스를 사용하면 데이터베이스는 테이블 전체를 스캔하는 대신 인덱스 트리를 탐색하여 검색 속도를 향상시킵니다.
또한, 인덱스는 범위 검색이나 정렬된 결과 반환에도 효과적으로 사용될 수 있습니다.
6. 인덱스 유지:
새로운 행이 삽입되거나 기존 행이 업데이트 또는 삭제될 때, 인덱스도 함께 유지되어야 합니다.
이를 위해 데이터베이스 엔진은 인덱스를 업데이트하거나 재구성합니다.
인덱스는 데이터베이스의 성능 향상을 위한 핵심 요소이지만, 너무 많은 인덱스는 데이터베이스의 성능을 저하시킬 수 있습니다.
따라서 적절한 인덱스를 선택하고 효과적으로 관리하는 것이 중요합니다.
'SQL > MYSQL' 카테고리의 다른 글
[MYSQL] 스토어드 프로시저 사용 방법 (0) | 2023.06.15 |
---|---|
[MYSQL] 인덱스가 필요한 경우와 필요 없는 경우 (0) | 2023.06.15 |
[MYSQL] 인덱스의 성능 비교하기 (0) | 2023.06.15 |
[MYSQL] 인덱스 생성, 변경, 삭제 방법 (0) | 2023.06.13 |
[MYSQL] 인덱스의 종류 및 자동 생성에 대한 설명 (0) | 2023.06.13 |
[MYSQL] 인덱스의 개념 설명 (0) | 2023.06.13 |
[MYSQL] 테이블스페이스 예제 및 사용 방법 (0) | 2023.06.12 |
[MYSQL] 뷰 예시 및 사용 방법 (0) | 2023.06.12 |