叶子节点是有序的,在往里面存储数据的时候,假设这个数据是int类型,在业务允许的范围之内且允许自增的情况下都要自增
为什么需要自增
因为有序和分裂,

假设这个叶子节点,只能存4条记录,存满了之后,还想往里面插入一条14的记录,因为叶子节点一定要保证有序,14在13和15之间,这个节点已经满了怎么办,把一个节点分裂成2个节点

然后把14放入进去,

分裂了之后,要保证上层节点有指针指向它,可能需要增加一个key值,上层节点若也满了,它也需要进行分裂。
往叶子节点里面插入一条数据,它会影响上面不同层数节点的变化,这就是页分裂的过程。
除了分裂,还有一个叶合并,比如1个节点1KB,另一个节点3KB,2个节点需要合并成一个节点4KB。
叶分裂、叶合并管理都是比较麻烦的。
如果是自增的话,直接后面追加就可以了,前面的不用管,就没有叶分裂、叶合并问题了。
但是会涉及到另外一个问题:索引的维护。
插入大量数据的时候,会导致性能变低,很多时间都浪费在索引的维护上面了。
在实际删除一条记录的时候,不是把磁盘里的数据真的删除了,而是给一个删除的标记,当有新数据来了之后可以往里面补全的。
mysql锁
乐观锁/悲观锁
cas就是乐观锁,加一个version字段,通过版本标识;悲观锁是mysql自带的排他锁
按照锁粒度划分

按照锁定粒度分为表锁和行锁,意向锁和自增锁都是表锁,间隙锁、临键锁、记录锁全部都属于行锁。一般来说,聊锁的时候,都是聊锁的粒度问题。
按照锁的方式划分

只有共享锁之间是兼容的,其他都不兼容。
数据库里面经常会发生锁的问题,怎么去排查锁?
锁一般情况下是不需要人为加的,人为加的话,常用的基本只有两种: