>  기사  >  데이터 베이스  >  인덱스 정렬 행에 대한 MySQL의 자세한 설명

인덱스 정렬 행에 대한 MySQL의 자세한 설명

黄舟
黄舟원래의
2017-03-02 16:33:561437검색

이전 글에서는 B-TREE의 여러 구조와 저장 방식을 간략하게 소개했지만, 인덱스와 데이터의 관계는 여전히 연결되어 있는 느낌이 들지 않습니다.

그래서요. 이번 글에서는 실제 데이터 행의 예를 통해 인덱스를 생성한 후 B+TREE에서 어떤 순서로 정렬되는지 살펴보겠습니다.

1. 원본 데이터 시뮬레이션 및 생성

아래 그림에서 왼쪽은 에 대한 시뮬레이션 데이터입니다. 내 편의. 엔진은 mysiam~

오른쪽은 EXCEL을 이용하여 무작위로 배열한 후의 일반 시뮬레이션 데이터 테이블입니다. 기본키는 1~27 순으로 배열되어 있습니다. 원래는 데이터를 순서대로 시뮬레이션할 예정인데, 인덱스를 추가한 후에는 인덱스 정렬 과정이 명확하게 보이지 않습니다.)

즉, 테스트하려는 원본 데이터를 만듭니다. 데이터는 인덱스가 작성되기 전에 이렇게 정렬되어 있으므로 이후의 모든 데이터는 이를 기반으로 정렬 효과를 더 쉽게 볼 수 있습니다. 인덱스가 생성된 후

테이블에는 4개의 필드(id, a, b, c)가 있고 총 27행의 데이터가 있습니다.



2. 인덱스 a 생성

아래와 같이 인덱스 a를 생성한 후 인덱스 구조가 원래 기본 키 ID에 따른 정렬에서 새로운 규칙으로 변경됩니다. . 그런 다음 새 구조를 생성하는 인덱스 a를 생성하고 필드 a의 규칙에 따라 정렬합니다. 기본 키 ID가 나타내는 첫 번째 데이터 행은 1, ID=3이 나타내는 두 번째 데이터 행, 세 번째 데이터 행입니다. ID=5 데이터 행으로 표시됩니다. . .


새 정렬 기본 키 ID

(ID는 데이터 행을 나타냄): 1 3 5 6 9 16 18 23 26 2 10 11 12 13 14 15 20 25 4 7 8 17 19 21 22 24 27

필드 a가 동일할 때, 배열은 기본 키 ID 앞과 뒤를 기준으로 정렬됩니다. 예를 들어 값은 a=1.1이지만 순서는 ID 값이 1, 3, 5, 6입니다. . 해당 행은 기본 키 ID와 유사한 순서로 정렬됩니다.

(즉, 값이 동일한 경우 정렬, ID가 작은 것이 앞에 오도록 함)



3. 인덱스(a,b)를 생성합니다

아래와 같이 공동 인덱스(a)를 생성한 후 ,b) 이 인덱스 구조에서는 원래 기본 키 ID에 따른 정렬이 새로운 규칙으로 변경되었습니다. 정렬 규칙은 먼저 a 필드에 따라 정렬한 다음 a를 기준으로 필드 b에 따라 정렬합니다. 즉, 인덱스 a를 기준으로 필드 b도 정렬됩니다.


새 정렬 기본 키 ID(ID는 데이터 행을 나타냄): 6 18 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21

a와 b 필드의 값을 찾는 것은 어렵지 않습니다. 동일하며 배열 이전과 이후도 기본 키 ID에 의해 결정됩니다. 예를 들어 a=1.1, b=2.1인 동일한 행(18, 6, 23)이지만 순서는 6, 18, 23입니다. .

필드(a,b) 인덱스, 먼저 인덱스로 정렬한 다음 a를 기준으로 b로 정렬

6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21


IV. ,b,c)

필드(a,b,c) 인덱스, 먼저 a,b 인덱스로 정렬한 다음 On (a, b)를 기준으로, c에 따라 정렬


새 정렬 기본 키 ID (ID는 행 데이터를 나타냄): 23 6 18 15 20 10 27 22 7 1 26 3 11 2 25 24 4 8 5 16 9 12 14 13 17 19 21



5. 결론:



이전 글 Mysql-Index-BTree Type [Simplified]에서도 같은 내용을 언급했는데, B-TREE 트리의 리프 노드 마지막 행은 왼쪽에서 오른쪽으로 이 순서로 배열되어 있습니다. 명령. 주문을 하면 검색이 훨씬 편리하고 빨라지지 않을까요?


(방을 찾는 과정을 위해) 인덱스(방 등록 테이블)가 있으면 먼저 인덱스의 데이터 구조를 읽어서(데이터가 작고 읽기가 빠르기 때문에) 실제 메모리의 저장 위치를 ​​찾는다. 물리적 디스크(해당 구조의 리프 노드에 해당) 집 번호를 찾은 후 디스크에서 직접 데이터를 가져오는 과정입니다. 색인이 없으면 목적지를 모른다는 의미입니다. 방에서 방으로 검색하면 됩니다.

색인이 없는 경우 기본 키 ID는 실제로 기본 키 ID 규칙에 따라 작은 것부터 큰 것까지 정렬된 인덱스입니다. 무언가가 있는 경우 인덱싱 중 인덱스 a, 조인트 인덱스(a, b), 조인트 인덱스(a, b, c)는 3개의 B+TREE 구조에 해당하며, 끝이 가리키는 물리 디스크는 잎 노드가 다릅니다.


결론 :

1. 인덱스가 생성되지 않은 경우 ID 기본 키에 따라 오름차순으로 정렬됩니다.

2. 인덱스 a가 생성되면 새로운 구조 인덱스가 생성됩니다. (B+TREE)가 생성됩니다.)는 빠른 검색을 용이하게 하기 위해 새로운 구조 규칙을 기록하는 데 사용됩니다

3. 인덱스 a, 인덱스 ab, 인덱스 abc 생성 시 해당 데이터가 생성됩니다. 세 개 순서가 다름

4. 인덱스 abc는 인덱스 ab와 인덱스 a를 모두 고려하므로 전자가 사용 가능한 경우 후자 두 개는 생성할 필요가 없습니다.

5. 인덱스가 생성되면 기본적으로 인덱스가 없는 컬럼은 ID가 증가하는 순으로 정렬됩니다.

위는 Mysql-index에 대한 자세한 설명입니다. 행 정렬 관련 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.