为什么不用订单号当做主键?

编程

2.自增ID 在插入的时候可以保证相邻的两条记录可能在同一个数据块,而订单号的连续性在设计上可能没有自增ID好,导致连续插入可能在多个数据块,增加了磁盘读写次数。

InnoDB存储引擎逻辑存储:

表空间 -> 段 -> 区 -> 页 -> 行

表空间由各个段构成;

区是由连续的页组成,每个区1MB;

一个区由可以有多个页,每页默认16KB;

页的组成部分:

1.文件头(File Header) 固定 38 个字节 (页的位置,上一页下一页位置,checksum , LSN)

2.数据页头( Page Header)固定 56 个字节 包含slot数目,可重用空间起始地址,3.第一个记录地址,记录数,最大事务ID等

4.虚拟的最大最小记录 (Infimum + Supremum Record)

5.用户记录 (User Records) 包含已经删除的记录以链表的形式构成可重用空间

6.待分配空间 (Free spaces) 未分配的空间

7.页目录 (Page Directory) slot 信息,下面单独介绍

8.文件尾 (File Trailer) 固定8个字节,用来保证页的完整性

InnoDB加锁流程:

将扫描到的记录都加锁,范围查询会加间隙锁,然后加锁过程按照两阶段锁2PL来实现:先加锁,然后所有的锁在事务提交的时候释放

InnoDB 问烂了的 ACID原则:

原子性:一个事务内,要么全成功要么全失败

一致性:保证磁盘和缓存的数据一致

隔离性:默认可重复读

持久性:事务提交后进行刷盘

以上是 为什么不用订单号当做主键? 的全部内容, 来源链接: utcz.com/z/512863.html

回到顶部