mysql主键为什么要自增_MySQL表为什么要有自增主键

一、使用自增主键的好处

1. 自增型主键有利于插入性能的提高

2. 自增型主键设计(int,bigint)可以降低二级索引的空间,提升二级索引的内存命中率

3. 自增型的主键可以减小page的碎片,提升空间和内存的使用

4. 无主键的表删除,在row模式的主从架构,会导致备库夯住

解释下原因:

1)Innodb中的每张表都会有一个聚集索引,而聚集索引又是以物理磁盘顺序来存储的,自增主键会把数据自动向后插入,避免了插入过程中的聚集索引排序问题。聚集索引的排序,必然会带来大范围的数据的物理移动,这里面带来的磁盘IO性能损耗是非常大的。而如果聚集索引上的值可以改动的话,那么也会触发物理磁盘上的移动,于是就可能出现page分裂,表碎片横生。

2)用户在使用RDS设计自己的表的时候,如果表没有主键,用户在删除数据的时候,由于删除条件没有索引,或者删除的条件过滤性极差,就会导致slave出现hang住,所以一定要为表加上主键,主键可以认为是innodb存储引擎的生命

二、那什么是聚集索引呢?

三、Innodb如何选择一个聚集索引的

对于Innodb,主键毫无疑问是一个聚集索引。但是当一个表没有主键,或者没有一个索引,Innodb会如何处理呢。请看如下规则

1. 如果一个主键被定义了,那么这个主键就是作为聚集索引

2. 如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引

3. 如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6

你可能感兴趣的:(mysql主键为什么要自增)