这一篇博客我们来讲一下页分裂,先抛出一个问题,就是MySQL为什么不推荐使用UUID作为主键?

这个我相信大家都知道,因为UUID生成是无序的,而主键最好是自增的,或者有顺序的,至于为什么要这样呢,其实就是因为MySQL会存在页分裂

既然数据页会分裂,那么具体是怎么分裂?分裂成什么样的呢?

首先来一个数据页的图:

上面就是数据页的结构了,首先两个数据页之间会有指针指向上一个和下一个数据页,形成一个双向链表,在数据页中存储的就是一行行的数据了,每个数据行之间会有单向指针连接,组成一个单向链表

我们还可以看到图中有一些数字,这些代表的是这行数据行的类型,第一行的行类型是2,就说明这一行是起始行,代表最小的一行,指针指向了下一行的数据;接下来的数据行的行类型是0,也就是普通的数据行,里面存储了各种字段;最后一行的行类型是3,代表了最大的一行

当一个数据页中的数据行太多放不下的下,就会生成一个新的数据页来存储,同时使用双向链表来相连

关键点来了,当我们使用索引的时候,有一个最基础的条件就是后面数据页中的数据行的主键值需要大于前一个数据页中数据行的主键值,至于为什么要这么做,其实索引简单来说,其实就是通过二分法不断减少要筛选的数据,而主键值就是筛选的标准,以尽快定位到我们需要的数据

所以如果我们设置的主键是乱序的,就有可能会导致数据页中的主键值大小不能满足索引使用的条件,此时就会产生页分裂,我们假设有如下图的数据页:

如果出现上图的数据页,我们可以发现后面数据页里的主键值比前一个数据页的主键值要小,里面的数据就会进行数据的挪动,也就是页分裂

通过页分裂,我们只要将主键为2的数据行与主键值为4的数据行互相挪动一下位置,就可以保证后面一个数据页的主键值比前一个数据页中的主键值大了,真正的页分裂可能比图中要复杂很多,但是都是通过这种形式来完成页分裂的

结论就是主键值最好是有序的,这样就可以不用页分裂,还能充分使用到索引,否则就必须进行页分裂来保证索引的使用

图解MySQL页分裂相关推荐

  1. mysql 页分裂_[翻译] InnoDB 页合并与页分裂

    原文标题:InnoDB Page Merging and Page Splitting 作者:Marco Tusa 译者:2014BDuck 翻译时间:2019-12-22 备注:因为 V 站限制注册 ...

  2. mysql 页分裂_InnoDB中的页合并与分裂

    如果你找过任何一位MySQL顾问,问他对你的语句和/或数据库设计的建议,我保证他会跟你讲主键设计的重要性.特别是在使用InnoDB引擎的情景,他们肯定会给你解释索引合并和页分裂这些.这两个方面与性能息 ...

  3. mysql 页分裂_mysql聚簇索引的页分裂原理实例分析

    本文实例讲述了mysql聚簇索引的页分裂.分享给大家供大家参考,具体如下: 在MySQL中,MyISAM采用的是非聚簇索引的,InnoDB存储引擎是采用聚簇索引的. 聚簇结构的特点: 根据主键查询条目 ...

  4. Mysql 页分裂页合并

    InooDB的文件格式,ibd利用主键索引到具体数据,数据都在叶节点上,frm就是一些数据库的元信息了. 重点看看ibd文件,这个文件由多个段组成,每个段和一个索引相关. 文件的结构是不会随着数据行的 ...

  5. mysql 页分裂_Innodb页面分裂

    何时进行页面分裂 插入操作时首先调用乐观插入函数btr_cur_optimistic_insert,若发现此次空间不足,进行悲观插入,函数btr_cur_pessimistic_insert,在这里会 ...

  6. MySql 笔记(五)InnoDB引擎页分裂与页合并的原理

    MySql 笔记(五)InnoDB引擎页分裂与页合并的原理 一.文件表(File-Table)结构 二.根,分支与叶子 三.页的内部原理 四.页合并的原理 五.页分裂的原理 六.主键的使用 七.总结 ...

  7. 大白话讲解MySQL 索引,页分裂,行溢出,事务

    目录 一.索引 索引是什么,页分裂 页的结构 mysql怎么查询数据 二.页合并 三.行溢出 四.事务 事务四大特性 1.原子性 2.一致性 3.隔离性 4.持久性 事务隔离级别 隔离级别导致的问题 ...

  8. mysql 聚簇索引页分裂_mysql聚簇索引的页分裂原理是什么 mysql聚簇索引的页分裂原理解析...

    本篇文章小编给大家分享一下mysql聚簇索引的页分裂原理解析,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 在MySQL中,MyISAM采用的是非聚簇索引的,InnoDB存 ...

  9. mysql是什么数据_了解MySQL数据页吗?说说什么是页分裂吧!

    1简单回顾 回顾一下之前和大家分享的知识点 看了前面的文章,想必你肯定了解了什么是Buffer Pool.LRU-List.Free-List.Flush-List,你也知道了当MySQL增删改查时, ...

最新文章

  1. SEL|世界土壤日-土壤生态学Nico Eisenhauer 教授讲座
  2. C51单片机中断定义
  3. java singleton 多线程_Java创建线程安全的单例singleton
  4. ntu 课程 ERIC(2):Planning your research
  5. BugkuCTF-Misc:想蹭网先解开密码
  6. linux的文件属性和权限学习——分析ls命令结果
  7. 结对开发项目:求整数数组中连续子数组和的最大值
  8. IP、TCP、UDP、HTTP头部信息
  9. node.js打包环境部署CentOS7.4
  10. Unity 宣布正式收购 Weta Digital
  11. mysql搜索中文 有的匹配不出来_MYSQL-中文检索匹配与正则表达式
  12. Leetcode 169 Majority Element
  13. proxool mysql 配置 useunicode_proxool + MySQL + servelt 的使用
  14. 实验楼Python项目
  15. 自动驾驶 11-4: 优化状态估计 Optimizing State Estimation
  16. 小技巧(11):使用PS更换证件照背景颜色(蓝色背景色换成白色背景色)
  17. Element概述、入门案例及布局
  18. Linux 创建无线热点
  19. 成语接龙(英语单词链)
  20. Json字符串转JsonObject例子

热门文章

  1. web飞信 接口解析
  2. BIGEMAP手机在线地图的查看
  3. SpringBoot整合WebService
  4. 直击谷歌启用在英国伦敦的新总部
  5. 帝国CMS网站建设仿站在线学习培训高清教学课程视频
  6. 资讯汇总230503
  7. 全球常见的自媒体平台(100个)
  8. unity实现吃鸡摄像头,自动拉近拉远视距,不被遮挡物遮盖人物效果
  9. 想找女朋友,结果遭遇了酒托,且行且小心啊!
  10. 利用swftools将pdf转换为swf小例