nas怎么做自己的网站,简历设计网官网,网上房地产上海,做网站做推广数据组织方式
在InnoDB存储引擎中#xff0c;表数据都是根据主键顺序组织存放的#xff0c;这种存储方式的表称为索引组织表(index organized table IOT)。
行数据#xff0c;都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图#xff1a;
在I…数据组织方式
在InnoDB存储引擎中表数据都是根据主键顺序组织存放的这种存储方式的表称为索引组织表(index organized table IOT)。
行数据都是存储在聚集索引的叶子节点上的。而我们之前也讲解过InnoDB的逻辑结构图
在InnoDB引擎中数据行是记录在逻辑结构 page 页中的而每一个页的大小是固定的默认16K。那也就意味着 一个页中所存储的行也是有限的如果插入的数据行row在该页存储不下将会存储到下一个页中页与页之间会通过指针连接。 页分裂
页可以为空也可以填充一半也可以填充100%。每个页包含了2-N行数据(如果一行数据过大会行溢出)根据主键排列。
A. 主键顺序插入效果 从磁盘中申请页 主键顺序插入 第一个页没有满继续往第一页插入 当第一个也写满之后再写入第二个页页与页之间会通过指针连接 当第二页写满了再往第三页写入 B. 主键乱序插入效果
假如1#,2#页都已经写满了存放了如图所示的数据
此时再插入id为50的记录我们来看看会发生什么现象 会再次开启一个页写入新的页中吗
不会。因为索引结构的叶子节点是有顺序的。按照顺序应该存储在47之后。
但是47所在的1#页已经写满了存储不了50对应的数据了。 那么此时会开辟一个新的页 3#。
但是并不会直接将50存入3#页而是会将1#页后一半的数据移动到3#页然后在3#页插入50。
移动数据并插入id为50的数据之后那么此时这三个页之间的数据顺序是有问题的。 1#的下一个页应该是3# 3#的下一个页是2#。 所以此时需要重新设置链表指针。 上述的这种现象称之为 “页分裂”是比较耗费性能的操作。 页合并
目前表中已有数据的索引结构(叶子节点)如下 当我们对已有数据进行删除时具体的效果如下:
当删除一行记录时实际上记录并没有被物理删除只是记录被标记flaged为删除并且它的空间变得允许被其他记录声明使用。
当我们继续删除2#的数据记录:
当页中删除的记录达到 MERGE_THRESHOLD1默认为页的50%InnoDB会开始寻找最靠近的页前或后看看是否可以将两个页合并以优化空间使用。
删除数据2并将页合并之后再次插入新的数据20则直接插入3#页。 这个里面所发生的合并页的这个现象就称之为 “页合并”。 MERGE_THRESHOLD合并页的阈值可以自己设置在创建表或者创建索引时指定。 ↩︎ 此时数据才被物理删除。 ↩︎