SQL优化——主键优化

一想到主键优化就不得不提主键一定要顺序插入

首先来了解一下为何这么说,涉及到两个知识点

页分裂

 当主键按照顺序插入时,则数据库会一个表一个表地新建,怎么说,大致意思就是:一张表比如说能存8个主键,当按顺序八个主键存满的时候,会开第二个页来存放后续需要存的主键。

 可是当你乱序插入时,这个主键为50的值,是不会插入到后面的表中,因为链表需要按顺序进行排序,这个主键为50的数据行,必须插入在47后边。恰好第一页中,已经没有能够存放50的位置,因此第一页中,超出50%的数据将会被切开,并且新建page3,将23,47移至page3中,然后再将50也放进page3,最后,重设置page1、page2和page3的指针,如下图所示:

上述现象就是页分裂,看得出来,确实复杂很多,执行了不少操作步骤,性能肯定是大大降低的,所以,我们需要尽量避免主键乱序插入。 

页合并

当删除一行数据的时候,实际上记录中并没有将其物理删除,而是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),innoDB会开始顺找最靠近的页(前或者后一页),看看是否可以将两页合并以优化空间使用。(MERGE_THRESHOLD是指页合并的阈值,默认为50%,可以在创建表或者创建索引时指定)

合并前

 合并后

 

主键设计原则

  1. 满足业务需求的情况下,尽量降低主键的长度
  2. 插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键
  3. 尽量不要使用UUID(UUID是无序的,插入的时候就会乱序)做主键或者是其他自然主键,比如说身份证号
  4. 业务操作时,尽量避免对主键的修改。

本篇文章仅作为学习笔记,供大家复习或者参考,学习源来自于B站黑马程序员下的MySQL数据库教程33. 进阶-SQL优化-主键优化_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值