>  기사  >  데이터 베이스  >  MyISAM과 InnoDB 스토리지 엔진의 인덱스 구현 방법의 차이점

MyISAM과 InnoDB 스토리지 엔진의 인덱스 구현 방법의 차이점

一个新手
一个新手원래의
2017-09-11 11:26:061382검색

1. MyISAM 인덱스 구현:

1) 기본 키 인덱스:

MyISAM 엔진은 B+Tree를 인덱스 구조로 사용하며 리프 노드의 데이터 필드에는 데이터 레코드의 주소가 저장됩니다. 다음 그림은 MyISAM 기본 키 인덱스의 개략적인 다이어그램입니다.                                         

테이블에 총 3개의 열이 있다고 가정합니다. Col1을 기본 키로 사용한다고 가정합니다. ) MyISAM 신호. MyISAM의 인덱스 파일은 데이터 레코드의 주소만 저장하는 것을 볼 수 있습니다.

2) 보조 키

MyISAM에서는 기본 인덱스의 키가 고유해야 하는 반면 보조 인덱스의 키는 고유해야 한다는 점을 제외하면 기본 인덱스와 보조 인덱스(보조 키) 사이에 구조적 차이가 없습니다. 인덱스가 반복될 수 있습니다.

Col2에 보조 인덱스를 생성하면 이 인덱스의 구조는 아래와 같습니다.


역시 B+Tree이며 데이터 필드에는 데이터 레코드의 주소가 저장됩니다. 따라서

MyISAM의 인덱스 검색 알고리즘은 먼저 B+Tree 검색 알고리즘에 따라 인덱스를 검색하는 것입니다. 지정된 Key가 있으면 해당 데이터 필드의 값을 빼낸 다음 데이터 필드의 값을 가져옵니다. 해당 데이터 레코드를 읽기 위한 주소로 사용됩니다.

MyISAM의 인덱싱 방식을 "비클러스터형"이라고도 부르는 이유는 InnoDB의 클러스터형 인덱스와 구별하기 위함입니다.

2. InnoDB 인덱스 구현

InnoDB도 인덱스 구조로 B+Tree를 사용하지만 구체적인 구현 방법은 MyISAM과 전혀 다릅니다.


1) 기본 키 인덱스:

​​​​​ ​​​​

MyISAM 인덱스 파일과 데이터 파일은 별개이며, 인덱스 파일은 데이터 레코드의 주소만 저장합니다. InnoDB에서 테이블 데이터 파일 자체는 B+Tree로 구성된 인덱스 구조이며, 이 트리의 리프 노드 데이터 필드는 완전한 데이터 레코드를 저장합니다. 이 인덱스의 키는 데이터 테이블의 기본 키이므로 InnoDB 테이블 데이터 파일 자체가 기본 인덱스가 됩니다. ㅋㅋㅋ                                                 

(그림 inndb 기본 키 인덱스)는 InnoDB 기본 인덱스(데이터 파일이기도 함)의 개략도입니다. 리프 노드에는 완전한 데이터 레코드가 포함되어 있음을 알 수 있습니다. 이런 종류의 인덱스를 클러스터형 인덱스라고 합니다. InnoDB의 데이터 파일 자체는 기본 키로 집계되기 때문에 InnoDB에서는 테이블에 기본 키가 있어야 합니다(MyISAM에는 기본 키가 없을 수 있음). 기본 키가 명시적으로 지정되지 않은 경우 MySQL 시스템은 데이터를 고유하게 식별할 수 있는 열을 자동으로 선택합니다. 존재하지 않는 경우 이 유형의 열에 대해 MySQL은 자동으로 InnoDB 테이블의 기본 키로 암시적 필드를 생성합니다. 이 필드의 길이는 6바이트이고 유형은 길다.

2) InnoDB의 보조 인덱스

InnoDB의 모든 보조 인덱스는 기본 키를 데이터 필드로 참조합니다. 예를 들어 아래 그림은 Col3에 정의된 보조 인덱스를 보여줍니다.


InnoDB 테이블은 클러스터형 인덱스 를 기반으로 구축되었습니다. 따라서 InnoDB의 인덱스는 매우 빠른 기본 키 조회 성능을 제공할 수 있습니다. 그러나 보조 인덱스(보조 인덱스, 즉 기본 키가 아닌 인덱스)에는 기본 키 열도 포함되므로 기본 키가 상대적으로 크게 정의되면 다른 인덱스도 커집니다. 테이블에 많은 인덱스를 정의하려면 기본 키를 가능한 한 작게 정의하십시오. InnoDB는 인덱스를 압축하지 않습니다.

텍스트 문자의 ASCII 코드가 비교 기준으로 사용됩니다. 클러스터형 인덱스 구현을 사용하면 기본 키로 검색하는 것이 매우 효율적이지만 보조 인덱스 검색에서는 인덱스를 두 번 검색해야 합니다. 먼저 보조 인덱스를 검색하여 기본 키를 얻은 다음 기본 키를 사용하여 기본 인덱스의 레코드를 검색합니다. .

다양한 스토리지 엔진의 인덱스 구현 방법은 인덱스의 올바른 사용과 최적화에 매우 도움이 됩니다. 예를 들어 InnoDB의 인덱스 구현을 알고 나면 지나치게 긴 필드를 사용하는 것이 권장되지 않는 이유를 쉽게 이해할 수 있습니다. 기본 키는 모든 보조 인덱스가 기본 인덱스를 참조할 때 기본 인덱스가 너무 길면 보조 인덱스가 너무 커지기 때문입니다. 또 다른 예를 들어, InnoDB 데이터 파일 자체가 B+트리이기 때문에 비단조 필드를 기본 키로 사용하는 것은 InnoDB에서 좋은 생각이 아닙니다. 비단조 기본 키로 인해 데이터 파일이 B+트리의 특성을 유지하게 됩니다. 새 레코드를 삽입할 때 빈번한 분할 조정은 매우 비효율적이며 자동 증가 필드를 기본 키로 사용하는 것이 좋습니다.

InnoDB indexMyISAM index의 차이점:

먼저 메인 인덱스인 InnoDB 데이터 파일 자체가 인덱스 파일입니다. MyISAM의 인덱스와 데이터는 분리되어 있습니다.

두 번째 차이점은 보조 인덱스입니다. InnoDB의 보조 인덱스 데이터 필드에는 주소 대신 해당 레코드의 기본 키 값이 저장됩니다. MyISAM의 보조 인덱스와 기본 인덱스 사이에는 큰 차이가 없습니다.

MySql 인덱스 알고리즘의 원리 분석 (이해하기 쉬움, B-tree만 이야기함)

위 내용은 MyISAM과 InnoDB 스토리지 엔진의 인덱스 구현 방법의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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