在一个表里不停的插入数据的时候,会涉及到一个页分裂的过程,也就是说,这个表里是如何出现一个又一个的数据页的。正常情况下在一个表里插入一些数据后,都会进入到一个数据页里去,在数据页内部,会组成一个单向链表,这个数据页内部的单向链表大致如下图所示:
上面的图,里面就是一行一行的数据,刚开始第一行是个起始行,它的行类型是2,就是最小的一行,然后它有一个指针指向了下一行数据,每一行数据都有自己每个字段的值,然后每一行通过一个指针不停的指向下一行数据,普通的数据行的类型都是0,最后一行是一个类型为3的,就是代表最大的一行。

假设你不停的在表里插入数据,那么刚开始是不是就是不停的在一个数据页插入数据?接着数据越来越多,越来越多,此时就要再搞一个数据页了,如下图所示:

但是此时会遇到一个问题,索引运作的一个核心基础就是要求后一个数据页的主键值都大于前面一个数据页的主键值,但是如果主键是自增的,那还可以保证这一点,因为新插入后一个数据页的主键值一定都大于前一个数据页的主键值。但是有时候主键并不是自增长的,所以可能会出现后一个数据页的主键值里,有的主键是小于前一个数据页的主键值的。

比如在第一个数据页里有一条数据的主键是10,第二个数据页里居然有一条数据的主键值是8,那此时肯定有问题了。

所以此时就会出现一个过程,叫做页分裂,就是万一你主键值都是自己设置的,那么在增加一个新的数据页的时候,实际上会把前一个数据页里主键值较大的,挪动到新的数据页里来,然后把新插入的主键值较小的数据挪动到上一个数据页里去,保证新数据页里的主键值一定都比上一个数据页里的主键值大。

假设新数据页里,有两条数据的主键值明显是小于上一个数据页的主键值的,如图所示:

如上图所示,第一个数据页里有1、5、6三条数据,第二个数据页里有2、3、4三条数据,明显第二个数据页里的数据的主键值比第一个数据页里的5和6两个主键都小,所以这个是不行的。此时就会出现页分裂的行为,把新数据页里的两条数据挪动到上一个数据页,上一个数据页里挪两条数据到新数据页里去,如下图所示:

上述就是一个页分裂的过程,核心目标就是保证下一个数据页里的主键值都比上一个数据页里的主键值要大。

不断在表中插入数据时,物理存储是如何进行页分裂的?相关推荐

  1. 在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?

    在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据? 原文 http://blog.csdn.net/quou2002/article/details/59650 ...

  2. (五十二)大白话不断在表中插入数据时,物理存储是如何进行页分裂的?

    上回我们讲到了数据页的物理存储结构,数据页之间是组成双向链表的,数据页内部的数据行是组成单向链表的,每个数据页内根据主键做了一个页目录 然后一般来说,你没有索引的情况下,所有的数据查询,其实在物理层面 ...

  3. (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据

    (八大方法.逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据 (八大方法.逐层深入,有你一定没见过的) 使用INSERT语句向表中插入数据(MSSQLSERVER版) 做开发的同仁对于向 ...

  4. python学习:向Firebird数据库表中插入数据

    向前一篇文章中创建的T1表中插入数据. # -*- coding: utf-8 -*- """ Created on Tue Jul 10 22:06:43 2018 使 ...

  5. SQL Server向表中插入数据

    一.语句 Example 1: --向学生表中插入数据 INSERT INTO STUDENT VALUES(201215121,'李勇','男',20,'CS'); INSERT INTO STUD ...

  6. Mysql命令insert into:向表中插入数据(记录)

    insert into命令用于向表中插入数据. insert into命令格式:insert into <表名> [(<字段名1>[,..<字段名n > ])] v ...

  7. Mysql之向表中插入数据

    Mysql之向表中插入数据 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...

  8. hbase中为何不能向表中插入数据_Hbase快速入门(超精炼总结)

    基本概念: HBase是列簇式Key-Value存储系统,构建在HDFS之上的.支持随机插入和删除. 总结Hbase的架构核心,就两个字"有序" . 磁盘的读写,随机与顺序,相差3 ...

  9. 使用insert向表中添加数据MySQL_使用INSERT语句向表中插入数据(MSSQLSERVER版)

    做开发的同仁对于向数据库中插入数据可谓是太普通不过了,也没什么说的,一般都是采用常用的INSERT INTO [(字段列表)] VALUES(字段值列表),这样的方式进行操作.今天,我要给大家介绍的是 ...

最新文章

  1. java常见问题排查
  2. jdbc之防sql注入攻击
  3. 计算机视觉与深度学习 | 不含动态背景的前景目标提取
  4. BugKuCTF 杂项 闪的好快
  5. LiveVideoStack线上交流分享 ( 八 ) —— TCP的困境与解决方案
  6. windowskb2685811补丁_KB898461补丁
  7. 5g无线网络对电子竞技市场发展影响
  8. 泰晤士“中国学科评级”结果出炉,中国数学学科评级榜单公示!
  9. String与StringBuffer和StringBuilder的根本区别
  10. SELinux系列(十三)—默认安全上下文的查询和修改(semanage命令)
  11. SAS-配对设计资料秩和检验
  12. python多找表格进行数据对比
  13. ffmpeg common.mak:159: *** missing separator. Stop.
  14. html 下拉框树,下拉框显示树形菜单
  15. [人工智能-深度学习-46]:FineTuning(微调)、Transfer Trainning(迁移学习)的理论基础与深度解析
  16. win7 64位 32位旗舰版下载
  17. 【C++】游戏开发--基础
  18. 清华、复旦、武大……全国近30所高校,超200位学子将相聚世界区块链大会·武汉高校分论坛...
  19. python 使用爬虫下载京东图片
  20. Metal(一) 三角形绘制

热门文章

  1. [肖博高中数学]高考数学二轮复习之函数与导数难点突破方法
  2. Plash 1.8.0 中文版 (将任意网站设为壁纸工具)
  3. ubuntu系统分辨率只有640*480的解决办法,适用部分正方形屏幕
  4. 随手写系列——写一个凯撒密码转换页面
  5. 理财入门笔记(1课-12课)
  6. PCB设计系列文章-印刷电路发展历史
  7. 【数学建模+数据处理类】2021数学建模国赛B题 乙醇偶合制备C4烯烃
  8. FileBeat系列:multiline的pattern negate match使用方法
  9. P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(有环图的搜索)
  10. js字符串大小写转换