my sql 클 러 스 터 색인 페이지 분열 원리 사례 분석

이 글 의 실례 는 mysql 폴 더 인덱스 의 페이지 분열 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
MySQL 에서 MyISAM 은 클 러 스 터 인덱스 가 아 닌,InnoDB 메모리 엔진 은 클 러 스 터 인덱스 를 사용한다.
클 러 스 터 구조의 특징:
  • 메 인 키 에 따라 항목 을 조회 할 때 줄 을 되 돌리 지 않 아 도 됩 니 다(데 이 터 는 메 인 키 노드 아래 에 있 습 니 다)
  • 4.567917.불규칙 한 데이터 삽입 에 부 딪 히 면 빈번 한 페이지 분열 을 초래한다왜 페이지 분열 이 생 깁 니까?
    이것 은 클 러 스 터 색인 은 균형 이 진 트 리 알고리즘 을 사용 하고 모든 노드 가 이 메 인 키 에 대응 하 는 줄 의 데 이 터 를 저장 하기 때 문 입 니 다.데 이 터 를 삽입 하 는 메 인 키 가 스스로 증가 했다 고 가정 하면 이 진 트 리 알고리즘 에 따라 이 데 이 터 를 특정한 노드 에 빠르게 추가 하고 다른 노드 는 움 직 이지 않 습 니 다.그러나 불규칙 한 데 이 터 를 삽입 하면 삽입 할 때마다 이 진 트 리 이전의 데이터 상 태 를 바 꿉 니 다.페이지 분열 을 초래 했다.
    테스트:
    표 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 데이터베이스 계획 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기