MySQL自增ID和业务字段ID做主键的区别

Published on:
Tags: mysql

主键的作用是为了唯一标识出表中的一行数据,并且不能为空。

一、自增ID

自增ID作为主键的优缺点:

自增ID的优点

  1. ID值由数据库引擎产生,方便开发人员
  2. ID值连续递增,提高数据库写入性能
  3. 整型类型,所需存储空间较小

自增ID缺点

  1. ID值本身会暴露数据规模
  2. ID值有序,容易暴露出其他ID值
  3. ID值由数据库引擎自动生成,分布式环境不能做到全局唯一

二、业务字段ID

业务字段ID作为主键可能产生的问题

  1. 主键不能为空,某些业务字段可能非必需提供,或者因为隐私不能提供(例如电话号码、身份证号码)
  2. 业务字段ID可能遇到回收利用(例如会员号),导致在显示和统计上出错
  3. 业务字段ID有可能在一个表中多次出现(比如订单号)

所以主键应该使用一个与业务无关的自增ID作为主键,但是也要接受自增ID的缺点。

三、自定义ID

主键除了使用自增ID,还可以自定义一个ID,例如:
使用:时间戳(13位)+去重整数(2位)+用户ID(后5位)作为主键ID

这个主键ID有20位,有序但不连续,趋势递增,有效的隐藏了数据规模,还能保证分布式环境下全局唯一。

随着数据规模的增加,自定义ID出现重复的概率也会增大,此时需要增加自定义ID的长度。