温馨提示×

温馨提示×

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

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

数据库主键怎样选择

发布时间:2026-09-03 01:33:27 来源:亿速云 阅读:97 作者:小樊 栏目:数据库

在数据库设计中,**主键(Primary Key)**用于唯一标识表中的每一行记录,选择一个合适的主键对性能、扩展性和数据质量都有很大影响。下面从原则、常见方案、对比和场景建议几个角度来说明。


一、主键选择的基本原则

  1. 唯一性:必须能唯一标识一行数据
  2. 非空性:主键列不能为 NULL
  3. 稳定性:尽量避免频繁修改(主键变更代价高)
  4. 简洁性:长度尽量小,利于索引和 JOIN 性能
  5. 业务无关性(推荐):最好不依赖业务含义,防止业务规则变化

二、常见主键类型及适用场景

1. 自增整数(AUTO_INCREMENT / IDENTITY)

id INT AUTO_INCREMENT PRIMARY KEY

优点

  • 简单、直观
  • 索引效率高(整数、顺序写入)
  • 占用空间小

缺点

  • 分库分表时不方便(易冲突)
  • 暴露业务规模(如 /user/1001
  • 不适合分布式系统

适用场景

  • 单体系统
  • 内部管理后台
  • 数据量中等、无强分布式需求

2. UUID / GUID

id CHAR(36) PRIMARY KEY

优点

  • 全局唯一
  • 适合分布式、微服务
  • 可在应用层生成

缺点

  • 无序,索引碎片多
  • 占用空间大(16–36 字节)
  • 查询性能不如整数

优化方案

  • 使用 UUIDv7(时间有序)
  • 使用 BINARY(16) 存储

3. 雪花算法(Snowflake ID)

64 位:时间戳 + 机器ID + 序列号

优点

  • 全局唯一
  • 大致有序(利于索引)
  • 适合高并发、分布式

缺点

  • 依赖时钟
  • 实现稍复杂

适用场景

  • 微服务
  • 高并发系统
  • 分库分表

4. 业务主键(自然主键)

身份证号 / 邮箱 / 订单号

优点

  • 有业务含义
  • 少一次 JOIN

缺点

  • 易变更(邮箱可改)
  • 长度大、索引慢
  • 业务耦合强

建议

  • 一般不作为主键
  • 可作为唯一索引

5. 联合主键

PRIMARY KEY (user_id, role_id)

优点

  • 适合多对多关系表
  • 避免冗余字段

缺点

  • 表结构复杂
  • 外键和 JOIN 不友好

适用场景

  • 关系表(如用户角色)
  • 明确复合唯一约束

三、不同系统规模下的推荐方案

场景 推荐主键
小型单体应用 自增 ID
中型业务系统 自增 ID + 业务唯一索引
分布式 / 微服务 Snowflake / UUIDv7
高并发写入 Snowflake
关系表 联合主键
强安全需求 UUID(不暴露数量)

四、常见误区

❌ 用手机号、邮箱做主键
✅ 用其做唯一约束

❌ 主键频繁更新
✅ 主键一旦生成不应变更

❌ 分布式系统用自增 ID
✅ 用全局唯一 ID 生成器


五、总结一句话

优先使用与业务无关、稳定、全局唯一、索引友好的主键(如自增 ID 或 Snowflake ID)。

如果你愿意,可以告诉我:

  • 使用的是 MySQL / PostgreSQL / Oracle?
  • 是否分布式?
  • 数据量和并发情况?

我可以给你更具体的设计方案。

向AI问一下细节

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

AI