>  기사  >  데이터 베이스  >  MySQL 클러스터형 인덱스

MySQL 클러스터형 인덱스

黄舟
黄舟원래의
2017-01-20 17:07:281640검색

전체 개요

1. 데이터 행은 innodb의 기본 인덱스 파일에 직접 저장되며, 이를 클러스터형 인덱스라고 합니다.

2. myisam에서는 기본 인덱스와 하위 인덱스가 모두 물리적 행(디스크 위치)을 가리킵니다.

ㅋㅋㅋ 이해가 안 되는 말을 두 마디 했습니다.

하나. 대중적인 설명

이렇게 이해할 수 있습니다:

클러스터형 인덱스(innodb): 인덱스의 리프 노드가 데이터 노드이고, 그 아래에 실제 데이터가 있습니다.

비클러스터형 인덱스(myisam): 리프 노드는 여전히 인덱스 노드이며 포인터가 해당 데이터 블록을 가리킵니다.

사진으로 설명하기:

MySQL 클러스터형 인덱스

MySQL 클러스터형 인덱스

보시다시피 엔진마다 유형이 다릅니다.

가장 큰 차이점은 리프 노드 아래에 데이터 블록이 있는지 여부입니다.

(기본키가 없으면 하나 생성..innodb는 클러스터형 인덱스로 구성)

2. 장점과 단점 :

분할 문제 :

트리 구조이기 때문에 리프 노드가 쪼개질 수 있다


그럼 문제가 온다 ,

비클러스터형 인덱스(myisam)의 경우 노드 아래에 저장된 물리적 행 주소는 내용이 작고 메모리에 캐시되며 빠르게 분할됩니다.

클러스터드 인덱스(innodb)의 경우 이 문제는 더 심각합니다. "행 데이터"는 노드 아래에 저장됩니다.

노드 아래에 데이터 파일이 있기 때문에 노드가 분할됩니다. innodb의 기본 키에는 정수 및 증분 정수를 사용해 보십시오. 기본 키 데이터가 불규칙하면 리프 노드에 저장될 때 분할 프로세스가 "행 데이터"로 다시 분할되어야 합니다. myisam은 주소를 분할하여 교체하는 한 하나의 주소만 기록합니다.

예:

예를 들어 분할은 이동 프로세스와 같습니다. 클러스터형 인덱스(innodb)의 경우 이동하려면 실제로 집에 있는 모든 데이터를 분할하고 이동해야 합니다. (mysiam), 기록된 집의 집 번호를 이동하는 것은 쉽지만, 그것이 가리키는 데이터는 이동할 필요가 없습니다.


셋. 테스트 시연:

innodb 엔진에서 정규 및 불규칙의 두 가지 방법으로 1000개의 데이터를 삽입합니다.

테스트 후 기본 키 증가 순서로 첫 번째 삽입에는 37초가 걸렸고, 비순서로 두 번째 삽입에는 42초가 걸렸습니다. 예상되는 이유는 다음과 같습니다. 순서대로 삽입을 수행해야 합니다. 리프 노드 분할은 이동하는 데 시간이 걸립니다. 즉, 노드 분할과 페이지 이동 사이에 시간 차이가 있는 반면 순차적 삽입은 노드 분할을 거의 일으키지 않습니다.

MySQL 클러스터형 인덱스

매핑 결론:

1. 읽기 작업에 mysiam 엔진을 사용합니다.

2. 단조로운 데이터를 인덱스로 선택합니다. 더 빠르게

자세히 보기: Mysql-Index 요약


아래에서 확인하세요:

"%innodb%"와 같은 변수 표시

상태 표시;

->innodb_pages_write(이 필드에 작성된 페이지 수)

MySQL 클러스터형 인덱스

필드가 있음을 알 수 있습니다. 무작위로 쓰는 경우 순차 쓰기보다 페이지를 쓰는 횟수가 더 많습니다. 이는 분할 및 이동으로 인해 쓰기 횟수가 늘어나고 시간이 더 많이 소요되는 이유이기도 합니다. 둘 사이의 두 번째 이벤트 차이.


MyISAM:

이것은 전통적인 ISAM 유형을 기반으로 하는 기본 유형이며 ISAM은 Indexed Sequential Access Method(인덱스 순차 액세스 방법)입니다. 의 약어로, 레코드와 파일을 저장하는 표준 방법으로, 다른 스토리지 엔진에 비해 MyISAM은 테이블을 확인하고 복구하는 도구를 대부분 갖추고 있습니다. MyISAM 테이블은 압축될 수 있으며 전체 텍스트 검색을 지원합니다. 트랜잭션에 안전하지 않으며 외래 키를 지원하지 않습니다. 롤백되면 불완전한 롤백이 발생하고 원자성이 없습니다. 다수의 실행을 수행하는 경우 SELECT, MyISAM이 더 나은 선택입니다.


InnoDB:

이 유형은 BDB 유형과 동일한 특성을 가지며 외래 키도 지원합니다. 매우 빠릅니다. .BDB보다 더 풍부한 기능을 갖고 있으니 필요하다면 트랜잭션에 안전한 스토리지 엔진을 원한다면 이를 사용하는 것이 좋습니다. 데이터가 INSERT 또는 UPDATE를 많이 수행하는 경우 성능상의 이유로 InnoDB 테이블을 사용해야 합니다

위 내용은 다음과 같습니다. MySQL 클러스터 인덱스 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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