MySQL主键设计
目录 MySQL主键设计原则 主键设计的常用方案 自增ID UUID 自定义序列表 如何解决水平分片的需求 UUID 独立的序列库 复合标识符 带分库策略的自定义序列表 主键的必要性 主键的数据类型选择 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录。 MySQL主键设计原则 MySQL主键应当是对用户没有意义的。 MySQL主键应该是单列的,以便提高连接和筛选操作的效率 永远也不要更新MySQL主键 MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等 MySQL主键应当有计算机自动生成。 主键设计的常用方案 自增ID 优点 : 1、数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利。 2、 数字型,占用空间小,易排序,在程序中传递方便。 缺点 : 1、不支持水平分片架构,水平分片的设计当中,这种方法显然不能保证全局唯一。 2、表锁 在MySQL5.1.22之前,InnoDB自增值是通过其本身的自增长计数器来获取值,该实现方式是通过表锁机制来完成的(AUTO-INC LOCKING)。锁不是在每次事务完成后释放,而是在完成对自增长值插入的SQL语句后释放,要等待其释放才能进行后续操作。比如说当表里有一个auto_increment字段的时候