mysql 为索引组织表,是必须存在一个主键的,即使未指定一个显示主键列,mysql 也会创建一个隐式的主键列
那我们该如何创建主键索引呢?
主键索引主要就是以下三种形式:
1、自增主键
2、随机主键
3、多列联合主键
我们来分析三种形式的 优缺点
1、自增主键
优点:写入非常友好,顺序写入,不会引发页分裂。
缺点: 如果依赖数据库自增主键的话,对主从表,从表的写入是不友好的,因为需要写入主表后返回主键ID
还有一个隐式的风险为:会有暴露业务数据的风险,举例:可以观察到一个月内你发布了多少商品,和新增了多少订单等
2、随机主键
缺点: 会引发页分裂
3、多列联合主键
缺点: 会引发页分裂,让二级索引变大
从这三种形式来看,是不是还是选择自增主键更好呢? 还有没有更优的方案
我们改正自增主键的缺陷就是更优方案了
主键自增不是让数据库来完成,而让我们业务来完成。我们业务依照一规则(比如雪花算法)生成顺序增长的唯一性ID 用于做数据库的主键即可