千家信息网

InnoDB表为什么一定要用自增列做主键

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要介绍InnoDB表为什么一定要用自增列做主键,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!0、导读我们先了解下InnoDB引擎表的一些关键特征:InnoDB引擎表是
千家信息网最后更新 2025年11月06日InnoDB表为什么一定要用自增列做主键

这篇文章主要介绍InnoDB表为什么一定要用自增列做主键,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

0、导读

我们先了解下InnoDB引擎表的一些关键特征:

  • InnoDB引擎表是基于B+树的索引组织表(IOT);

  • 每个表都需要有一个聚集索引(clustered index);

  • 所有的行记录都存储在B+树的叶子节点(leaf pages of the tree);

  • 基于聚集索引的增、删、改、查的效率相对是最高的;

  • 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引;

  • 如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引;

  • 如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。

综上总结,如果InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的,也就是下面这几种情况的存取效率最高:

  • 使用自增列(INT/BIGINT类型)做主键,这时候写入顺序是自增的,和B+数叶子节点分裂顺序一致;

  • 该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候InnoDB会选择内置的ROWID作为主键,写入顺序和ROWID增长顺序一致;

  • 除此以外,如果一个InnoDB表没有显式主键,但有可以被选择为主键的唯一索引,且该唯一索引可能不是递增关系时(例如字符串、UUID、多字段联合唯一索引的情况),该表的存取效率就会特别差。

实际情况是如何呢?经过简单TPCC基准测试,修改为使用自增列作为主键与原始表结构分别进行TPCC测试,前者的TpmC结果比后者高9%倍,足见使用自增列做InnoDB表主键的明显好处,其他更多不同场景下使用自增列的性能提升可以自行对比测试下。

附图:

1、B+树典型结构

2、InnoDB主键逻辑结构

以上是"InnoDB表为什么一定要用自增列做主键"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

索引 顺序 选择 效率 最高 一致 叶子 情况 结构 节点 存取 测试 内容 引擎 更多 篇文章 不同 原始 明显 除此以外 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术网盘 军用软件开发流程 提高防范意识维护网络安全 网络技术维修学徒 家政软件开发案例 数据库怎么选取两个时间段 网络安全对现代生活的影响论文 软件开发征税范围 网络安全违规外联典型案例 软件开发量报价 三门峡网络安全监察部在哪里 虹口区品质软件开发服务不二之选 软件开发采购制度 数据库中怎么写最高分的语句 服务器如何与app建立联系 数据库中的use是什么意思 手机软件开发软件开发 文明重启新手开服务器教学 密云区数据网络技术售后服务 软件开发什么最好就业 双梦是哪个服务器贴吧 域名备案时服务器要有东西吗 长沙农商银行软件开发面试 网络安全对现代生活的影响论文 access数据库的窗体设计 ncr 网络安全素质 远程访问公司局域网数据库 招远软件开发外包公司 小米路由web服务器 有什么网站可以自学软件开发
0