의 효율성을 향상시키기 위해 색인을 통해 관계형 데이터베이스 쿼리 뒤에 원리를 설명

  1. 인덱스없이, 데이터베이스 엔진은 디스크 IO의 많은 양을 생산하는 전체 테이블 스캔에 의해 데이터를 찾을 필요가있다.

  2. 쿼리 속도를 B + 트리 인덱스를 사용하여 관계형 데이터베이스. B + 트리 (각 노드는 키해야합니다 : 모든 키가 하위 트리 오른쪽 하위 트리에 저장된 키 값보다 작은 것으로 저장보다 큰 왼쪽) 이진 검색 트리입니다, 임의에 대한보기 때문에 키가 루트 노드에서 이진 검색 쿼리를 수행하여 가속 할 수있는 경우, 레이어의 수는 쿼리 트리의 비용에 따라 달라집니다.

  3. 범위 쿼리 및 정렬 최적화 : 각 리프 노드에서 다음 리프 노드에 대한 포인터, 저장하므로 쿼리의 범위가 범위를 지정하는 경우, 다시 나뭇잎을 통해 통과 후, 왼쪽 값 범위에서의 리프 노드를 찾기 위해 루트 노드로 시작하는 것을 올바른 노드는 그룹화, 정렬, 범위 쿼리를 가속화 할 수 해당 범위 값, 및 기타 데이터베이스 쿼리 작업을 찾을 수 있습니다.

  4. 디스크 읽기 및 쓰기 속도를 최적화 : 하나의 디스크를 읽을 수 있도록 만 키 저장 리프 노드를 제외한 다른 노드 및 쓰기 많은 데이터로 얻을 수 있습니다. MySQL은, 예를 들어, B + 트리의 1000 만 라인이 마스터 키에 따라 이론적으로 찾을 수있는 테이블에 해당하는 경우에만 세 번 전체 테이블 스캔 더 많은 디스크 IO 성능의 순서에 상대적 가져온 디스크 IO를 필요로한다.

  5. MySQL과 B + 트리 인덱스의 실제 구현시에 다른 데이터베이스 엔진은 디스크를 읽고 쓰기 위해 최적화 : 비 리프 노드가 다른 저장 데이터와 구별하기 위해 주 인덱스에 따라, 데이터를 저장할 리프 노드의 키 값에 부가하여, 단지 키 값을 저장할 인덱스 (클러스터 된 인덱스)와 보조 인덱스 :

    리프 노드 (A))를 주기억 장치 키에 대응하는 인덱스 값의 완전한 레코드, 레코드를 직접 출력 할 수 찾을 차 인덱스를 사용하여, 테이블이 차 인덱스를 생성 할 수있다.

    메인 인덱스 룩업에 다음 리프 노드 b) 일반 지수 차 키 값에 대응하여 저장되고, 따라서 보조 인덱스 찾을 때는 기본 키를 찾을 필요가 있고, 이차 인덱스 테이블 복수 생성 될 수있다.

  6. B + 트리뿐만 아니라, 관계형 데이터베이스는 일반적으로 해시 인덱스를 지원, 해시 인덱스는 정렬 및 지원되지 않는 그룹화, 매우 효율적인 랜덤 검색 될 수 있지만 범위 쿼리 할 수 ​​있습니다.

출시 팔 개 원래 기사 · 원 찬양 2 · 조회수 210

추천

출처blog.csdn.net/qq_37492314/article/details/105291529