Mysql 튜닝: Mysql 인덱스의 기본 데이터 구조 및 알고리즘에 대한 심층적인 이해

1. 인덱싱의 성격

인덱스는 MySQL이 데이터를 효율적으로 얻는 데 도움이 되는 정렬된 데이터 구조입니다. Mysql 인덱스의 기본 데이터 구조는 B+ 트리를 사용합니다.
여기에 이미지 설명을 삽입하세요.

  • B+ 트리의 노드는 페이지에 저장되며, 페이지 크기는 약 16KB입니다.
  • 리프가 아닌 노드에는 데이터를 저장하지 않고 인덱스만(중복) 배치할 수 있으며 더 많은 인덱스를 배치할 수 있습니다.
  • 리프 노드에는 모든 인덱스 필드가 포함됩니다.
  • 리프 노드는 포인터로 연결되어 간격 액세스 성능을 향상시킵니다.
show global status like 'innodb_page_size';

여기에 이미지 설명을 삽입하세요.

데이터베이스 테이블과 파일 간의 대응

여기에 이미지 설명을 삽입하세요.

2. 인덱스 구현

MyISAM 스토리지 엔진 인덱스 구현
여기에 이미지 설명을 삽입하세요.

인덱스는 MYI 파일, MYD 파일에 배치되며 MyISAM 인덱스 파일과 데이터 파일은 분리됩니다. (MyISam의 기본 키는 비클러스터형 인덱스입니다)

InnoDB 스토리지 엔진 인덱스 구현

  • 테이블 데이터 파일(ibd) 파일 자체는 B+ 트리에 따라 구성된 인덱스 구조 파일입니다.
  • 클러스터형 인덱스 - 리프 노드는 전체 데이터 레코드를 보호합니다.
  • InnoDB 테이블이 기본 키를 설정해야 하는 이유( 由InnoDB下数据的存储情况就可以知道为什么要建立索引)와 정수 자동 증가 인덱스가 권장되는 이유( 整型索引在排序和存储方面都有优势,自增索引在构建B+树时可以减少结点分裂操作的次数,提高B+树构建的效率)
  • 기본 키가 아닌 모든 리프 노드가 데이터 자체 대신 기본 키 값을 저장하는 이유는 무엇입니까?
    답변: 데이터 일관성과 저장 공간 절약을 위한 것입니다.

여기에 이미지 설명을 삽입하세요.

3. 조인트 인덱스(실제로 더 일반적으로 사용됨)

유니언 인덱스 구조여기에 이미지 설명을 삽입하세요.

기본 관절 인덱스는 어떻게 정렬됩니까?
답변: 인덱스가 생성된 순서대로 정렬됩니다. 첫 번째 필드가 정렬되면 후속 필드는 고려할 필요가 없습니다. 동일한 첫 번째 인덱스 열에 여러 데이터가 있는 경우 데이터는 정렬됩니다. 그런 다음 두 번째 색인을 사용하여 정렬하는 방식으로 정렬이 완료될 때까지 계속합니다. (이것은 가장 왼쪽 접두사 규칙의 원리이기도 합니다)

추천

출처blog.csdn.net/qq_43456605/article/details/133070554