my sql 클 러 스 터 색인 페이지 분열 원리 사례 분석
2636 단어 mysql클 러 스 터 인덱스
MySQL 에서 MyISAM 은 클 러 스 터 인덱스 가 아 닌,InnoDB 메모리 엔진 은 클 러 스 터 인덱스 를 사용한다.
클 러 스 터 구조의 특징:
이것 은 클 러 스 터 색인 은 균형 이 진 트 리 알고리즘 을 사용 하고 모든 노드 가 이 메 인 키 에 대응 하 는 줄 의 데 이 터 를 저장 하기 때 문 입 니 다.데 이 터 를 삽입 하 는 메 인 키 가 스스로 증가 했다 고 가정 하면 이 진 트 리 알고리즘 에 따라 이 데 이 터 를 특정한 노드 에 빠르게 추가 하고 다른 노드 는 움 직 이지 않 습 니 다.그러나 불규칙 한 데 이 터 를 삽입 하면 삽입 할 때마다 이 진 트 리 이전의 데이터 상 태 를 바 꿉 니 다.페이지 분열 을 초래 했다.
테스트:
표 2 장 만 들 기
create table t8(
id int primary key,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) engine innodb charset utf8;
create table t9(
id int primary key,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) engine innodb charset utf8;
불규칙 한 메 인 키 데이터 와 1W 규칙 의 메 인 키 데 이 터 를 삽입 하 는 데 사용 되 는 phop 스 크 립 트 를 작성 합 니 다.
<?php
set_time_limit(0);
$conn = mysql_connect('localhost','root','1234');
mysql_query('use test;');
//
$str = str_repeat('a', 500);
$startTime = microtime(true);
for($i=1;$i<=10000;$i++){
mysql_query("insert into t8 values($i,'$str','$str','$str','$str','$str','$str')");
}
$endTime = microtime(true);
echo $endTime-$startTime.'<br/>';
//
$arr = range(1, 10000);
shuffle($arr);
$startTime = microtime(true);
foreach($arr as $i){
mysql_query("insert into t9 values($i,'$str','$str','$str','$str','$str','$str')");
}
$endTime = microtime(true);
echo $endTime-$startTime.'<br/>';
테스트 결과 도1W 규칙 의 데이터:998 초=16 분
1W 조 불규칙 데이터:1939 초=32 분
결론:
클 러 스 터 색인 의 홈 키 값 은 무 작위 값 이 아 닌 연속 으로 증가 해 야 합 니 다.(무 작위 문자열 이나 UUID 를 사용 하지 마 십시오)그렇지 않 으 면 대량의 페이지 분열 과 페이지 이동 을 초래 할 수 있 습 니 다.InnoDB 를 사용 할 때 다음 과 같이 정의 하 는 것 이 좋 습 니 다.
id int unsigned primary key auto_increment
더 많은 MySQL 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,본 논문 에서 말 한 것 이 여러분 의 MySQL 데이터베이스 계획 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.