MySQL 클러스터형 인덱스

黄舟
풀어 주다: 2017-01-20 17:07:28
원래의
1660명이 탐색했습니다.

전체 개요

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)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿