Bootstrap

【二十九、MySql】进阶篇--SQL优化--主键优化(了解页分裂和页合并的原理)

1,数据组织方式:
在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index orgnized table)简称IOT
一张表默认主键索引是聚集索引,
在这里插入图片描述

在这里插入图片描述

2,主键顺序插入
在这里插入图片描述

在这里插入图片描述

3,主键乱序插入–页分裂
第50进来的时候,不是开辟新的数据页将50放入,
在这里插入图片描述
而是存放在47之后,但是数据页1空间已经不够
在这里插入图片描述
此时在数据页1找到50%的位置,将超出50%的部分移动到新开辟的数据页中;将23、47移动到开辟的新数据页3,再将50插入到数据页3中
在这里插入图片描述
此时数据页1的下一页是数据页3,需要再对链表指针重新设置,此现象称之为页分裂
在这里插入图片描述
4,页合并
在这里插入图片描述
数据页1未被标记,将数据页3的数据移动到数据页2中
在这里插入图片描述
在这里插入图片描述
5,主键设计原则
①在满足业务需求的情况下,尽量降低主键的长度;
②插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键,避免乱序插入存在页分裂现象;
③尽量不要使用UUID做主键或者是其它自然主键,如身份证号,因为这两者不一定是顺序的,且长度较长,在检索的时候耗费大量磁盘IO;
④业务操作时,避免对主键的修改,修改主键,还需要去修改对应的索引结构,代价较大。

;