为在innodb中什么主键用auto_increment效率会提高

简介:

 auto_increment是自增量,一般是修饰int型,效率主要体现在一下几个方面

1一般该列会作为索引,在innodb中,非聚簇索引是建立在聚簇索引上的,有主键就主键是聚簇索引,否则隐藏一个唯一的列作为聚簇索引,在非聚簇索引中不是包含行指针而是会包含主键,或没有主键时会包含唯一的那个隐藏列来一起存储,这样以对主键的长度有一定的要求,越短会对索引存储空间的消耗越少,同时索引查询也会快一点。

InnoDB对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。一般来说,DBMS都会以聚簇索引的形式来存储实际的数据,它是其它二级索引的基础。

2在数据插入时,如果是自增的,那么可以保证后面插入的数据在页内是接在前一个记录后面的,这样不会因为聚簇索引的物理顺序而引起排序,否则可能导致后面的记录比已经插入的记录跟靠前,导致页内记录向后移动

3因为innodb缓存的是数据和索引,索引减小,对缓存空间的消耗也有一定贡献




本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/766602,如需转载请自行联系原作者

相关文章
|
16天前
|
存储 关系型数据库 MySQL
InnoDB为什么使用自增id作为主键?
MySQL以数据页(默认16K)为单位存储数据。自增ID主键时,写满一页直接申请新页;非自增ID主键需保持索引有序,插入数据可能引发页分裂,即需将部分数据移至新页,影响插入效率。
29 6
|
7月前
|
存储 SQL 关系型数据库
MySQL 5.7和 MySQL8.0 InnoDB auto_increment 初始化的区别
在MySQL 5.7及之前,自动递增计数器只存于内存,重启后需通过查询确定初始值。从MySQL 8.0开始,计数器变化时写入重做日志,检查点时保存至数据字典,确保重启后能基于持久化的最大值初始化,避免查询,增强连续性和一致性。[[MySQL参考手册, 3099页]](https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html)
|
7月前
|
存储 SQL 关系型数据库
InnoDB主键索引树和二级索引树
InnoDB主键索引树和二级索引树
88 0
InnoDB主键索引树和二级索引树
|
存储 关系型数据库 MySQL
InnoDB为什么使用自增id作为主键
InnoDB是MySQL数据库中一种常用的存储引擎,它使用自增id作为主键的设计是出于多方面的考虑。
460 0
|
存储 Oracle 关系型数据库
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
107 0
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
|
存储 SQL 关系型数据库
【InnoDB的主键自增长实现原理】
【InnoDB的主键自增长实现原理】
158 0
|
SQL 关系型数据库 MySQL
MySQL中ENGINE=InnoDB、AUTO_INCREMENT的意思
MySQL中ENGINE=InnoDB、AUTO_INCREMENT的意思
|
SQL 存储 关系型数据库
MYSQL INNODB主键使用varchar和int的区别
原创,如果有误请指出 今天同事讨论关于主键使用varchar和int的区别。 我现在总结的3个问题: 1、tablespace中空间浪费    当然我们知道使用varchar可能会导致辅助索引比较大,因为用到varchar可能存储的字符较多,同时    在行头也存在一个可变字段字符区域(1-2)字节    而辅助索引叶子结点毕竟都存储了主键值,这样至少会多varchar数据字节数量+1(或者2) 字节- 4(int)字节空间。
2234 0
|
关系型数据库 MySQL
Mysql重启后innodb和myisam插入的主键id变化总结
Mysql重启后innodb和myisam插入的主键id变化总结
353 0
Mysql重启后innodb和myisam插入的主键id变化总结
|
存储 Oracle 关系型数据库
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键