MySQL自增ID和业务字段ID做主键的区别
主键的作用是为了唯一标识出表中的一行数据,并且不能为空。
一、自增ID
自增ID作为主键的优缺点:
自增ID的优点
- ID值由数据库引擎产生,方便开发人员
- ID值连续递增,提高数据库写入性能
- 整型类型,所需存储空间较小
自增ID缺点
- ID值本身会暴露数据规模
- ID值有序,容易暴露出其他ID值
- ID值由数据库引擎自动生成,分布式环境不能做到全局唯一
二、业务字段ID
业务字段ID作为主键可能产生的问题
- 主键不能为空,某些业务字段可能非必需提供,或者因为隐私不能提供(例如电话号码、身份证号码)
- 业务字段ID可能遇到回收利用(例如会员号),导致在显示和统计上出错
- 业务字段ID有可能在一个表中多次出现(比如订单号)
所以主键应该使用一个与业务无关的自增ID作为主键,但是也要接受自增ID的缺点。
三、自定义ID
主键除了使用自增ID,还可以自定义一个ID,例如:
使用:时间戳(13位)+去重整数(2位)+用户ID(后5位)作为主键ID
这个主键ID有20位,有序但不连续,趋势递增,有效的隐藏了数据规模,还能保证分布式环境下全局唯一。
随着数据规模的增加,自定义ID出现重复的概率也会增大,此时需要增加自定义ID的长度。