• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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的聚簇索引及聚簇索引是如何长高的
    上一篇:这种sql写法真的会导致索引失效吗
    下一篇:sqlite3迁移mysql可能遇到的问题集合
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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