您好,欢迎来到皓特汽车网。
搜索
您的当前位置:首页mysql聚簇索引的页原理实例分析

mysql聚簇索引的页原理实例分析

来源:皓特汽车网


本文实例讲述了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;
    
    

    写一个php脚本,用于插入1W条无规则的主键数据和1W条规则的主键数据,来看看区别。

    <?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索引操作技巧汇总》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

    希望本文所述对大家MySQL数据库计有所帮助。

    您可能感兴趣的文章:

  • mysql建立高效的索引实例分析
  • mysql重复索引与冗余索引实例分析
  • mysql索引覆盖实例分析
  • mysql索引对排序的影响实例分析
  • MySQL中NULL对索引的影响深入讲解
  • 详解MySQL索引原理以及优化
  • 通过唯一索引S锁与X锁来了解MySQL死锁套路
  • mysql 添加索引 mysql 如何创建索引
  • MySQL索引类型总结和使用技巧以及注意事项
  • MySQL查看、创建和删除索引的方法
  • MySQL 创建索引(Create Index)的方法和语法结构及例子
  • Copyright © 2019- howto1234.cn 版权所有

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务