温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

主键为何用自增

发布时间:2026-10-14 04:59:49 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

在数据库设计中,**主键(Primary Key)使用自增(Auto Increment)**是一种非常常见的做法,主要原因可以归纳为以下几个方面:


1. 保证唯一性,且实现简单

  • 自增字段由数据库自动生成,每次插入新记录时自动 +1(或按步长递增)
  • 不需要业务代码去“生成 ID”,避免重复风险
  • 特别适合「无业务含义的代理主键」
id INT PRIMARY KEY AUTO_INCREMENT

2. 插入性能好(写入友好)

  • 自增主键通常是递增的
  • 在 B+Tree 索引中,新数据总是追加在索引末尾
  • 减少页分裂(Page Split),写入效率更高

相比之下,UUID 或随机 ID 会导致:

  • 数据插入位置随机
  • 频繁的页分裂和索引重排
  • 写入性能下降

3. 占用空间小

  • 自增主键一般用 INT(4 字节)或 BIGINT(8 字节)
  • 比 UUID(16 字节)更小
  • 索引更紧凑,查询更快

4. 便于排序和分页

  • 自增 ID 天然有序
  • 适合:
    • 按时间顺序查询
    • ORDER BY id
    • 游标分页(WHERE id > ?)

5. 作为外键更合适

  • 自增整数做外键:
    • 存储小
    • 关联效率高
  • 若用业务字段做主键(如手机号、邮箱),改动成本高、索引大

6. 避免业务耦合

使用“无业务含义的自增 ID”作为主键:

  • 业务逻辑变化不影响主键
  • 例如:用户改名、换手机号,不影响关联数据

什么时候不适合用自增主键?

场景 问题
分布式系统 多库自增会冲突
需要暴露 ID 容易被遍历(如 /user/1)
高安全场景 可推测数据量

✅ 替代方案:

  • 雪花算法(Snowflake)
  • UUID
  • 分布式 ID 生成器(如 Leaf、UidGenerator)

总结一句话

自增主键简单、高效、稳定,适合绝大多数单体或单库系统的内部标识。

如果你是:

  • 面试场景
  • 分布式架构
  • 特定数据库(MySQL / PostgreSQL)

我可以给你更针对性的解释。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手