MySQL为何主键自增【MySQL教程】,mysql
作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:21评论:0
引荐课程:MySQL教程。
InnoDB引擎表的特性
1、InnoDB引擎表是基于B+树的索引构造表(IOT)
关于B+树
B+ 树的特性:
一切关键字都出如今叶子结点的链表中(浓密索引),且链表中的关键字恰好是有序的;
不能够在非叶子结点掷中;
非叶子结点相称因而叶子结点的索引(希罕索引),叶子结点相称因而存储(关键字)数据的数据层;
2、假如我们定义了主键(PRIMARY KEY),那末InnoDB会挑选主键作为群集索引、假如没有显式定义主键,则InnoDB会挑选第一个不包括有NULL值的唯一索引作为主键索引、假如也没有如许的唯一索引,则InnoDB会挑选内置6字节长的ROWID作为隐含的群集索引(ROWID跟着行纪录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
3、数据纪录自身被存于主索引(一颗B+Tree)的叶子节点上。这就请求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据纪录按主键递次寄存,因而每当有一条新的纪录插进去时,MySQL会依据其主键将其插进去恰当的节点和位置,假如页面到达装载因子(InnoDB默以为15/16),则拓荒一个新的页(节点)
4、假如表运用自增主键,那末每次插进去新的纪录,纪录就会递次添加到当前索引节点的后续位置,当一页写满,就会自动拓荒一个新的页
5、假如运用非自增主键(假如身份证号或学号等),因为每次插进去主键的值近似于随机,因而每次新纪录都要被插到现有索引页得中心某个位置,此时MySQL不能不为了将新纪录插到适宜位置而挪动数据,以至目的页面能够已被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读返来,这增加了许多开支,同时频仍的挪动、分页操纵造成了大批的碎片,得到了不够紧凑的索引构造,后续不能不通过OPTIMIZE TABLE来重修表并优化添补页面。
综上总结,假如InnoDB表的数据写入递次能和B+树索引的叶子节点递次一致的话,这时候存取效力是最高的,也就是下面这几种状况的存取效力最高:
运用自增列(INT/BIGINT范例)做主键,这时候写入递次是自增的,和B+数叶子节点破裂递次一致;
该表不指定自增列做主键,同时也没有能够被选为主键的唯一索引(上面的前提),这时候InnoDB会挑选内置的ROWID作为主键,写入递次和ROWID增进递次一致;
除此以外,假如一个InnoDB表又没有显现主键,又有能够被挑选为主键的唯一索引,但该唯一索引能够不是递增关联时(比方字符串、UUID、多字段团结唯一索引的状况),该表的存取效力就会比较差。
以上就是MySQL为何主键自增的细致内容,更多请关注ki4网别的相干文章!
标签:mysql
相关推荐
- 如何修改mysql的默认时区_MySQL教程,mysql,时区
- mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- linux源码安装mysql5.7_MySQL教程,linux,mysql,mysql5.7
- mysql外键约束怎么写_MySQL教程,mysql,外键约束
- mysql如何设置字符集为UTF8_MySQL教程,mysql,UTF8,字符集
- mysql怎么创建数据库_MySQL教程,mysql,数据库
- 如何查看mysql的日志文件_MySQL教程,mysql,日志文件
- mysql如何删除表中一行数据?_MySQL教程,mysql
- access是数据库管理系统吗_MySQL教程,access,mysql
- mysql修改字段类型有哪些?_MySQL教程,mysql,修改字段
你 发表评论:
欢迎- MySQL教程排行
-
- 1mysql索引介绍_MySQL教程,mysql,索引,介绍
- 2Mysql如何挂盘_MySQL教程,Mysql
- 3开启mysql慢查询日志的方法_MySQL教程,开启,mysql,慢查询,日志,方法
- 4mysql实现linux下数据库目录迁移_MySQL教程,mysql,linux,数据库,目录,迁移
- 5mysql中key 、primary key 、unique key 与index区别详解_MySQL教程,mysql
- 6分离数据库和附加数据库的区别_MySQL教程,数据库
- 7关于linux下mysql去除严格模式_MySQL教程,linux
- 8mysql实现大量数据转换为数组_MySQL教程,mysql,数据,转换,数组
- 9利用mysql生成唯一序号_MySQL教程,mysql
- 最新文章
- 广而告之