自增ID、雪花ID与UUID作为数据库主键的优劣对比

4 阅读1分钟

自增id,雪花id,uuid作为表的主键,分别有什么优缺点

  1. 自增id:
    优点:性能最好,每次有新记录插入表中,都是顺序写入磁盘,页分裂少,写入效率高,且更省空间,占用内存小
    缺点:在分布式环境下,如果多张表都要保证唯一且递增,实现起来很麻烦
    会暴露业务信息,容易被人猜到数据总量和增量,存在一定的安全风险
    高并发下可能会有竞争,自增锁可能会成为瓶颈
  2. 雪花id:
    优点:全局唯一,在分布式系统中,可以保证跨数据库,跨表的id唯一
    由于随机生成时包含时间戳,整体呈递增趋势,对MySQL聚簇索引性能影响较小
    可以反解出生成时间和机器号,便于排查问题
    缺点:长度较大,占用空间较多
    如果服务器时钟回拨,可能会产生id冲突
  3. uuid:
    优点:生成简单,全球唯一
    缺点:无序性,uuid完全随机,新数据插入表中,为了维护b+树的有序性,无法顺序写入磁盘,导致大量页分裂
    占用空间较大
    总结 对于单体应用,优先推荐使用自增id作为主键,因为它既不占用大量内存,也能保证主键的唯一,写入磁盘时也比较方便
    对于分布式应用,优先推荐使用雪花id,因为分布式应用通常会设计分库分表,如果要保证多个表和多个库中的id唯一,就必须使用雪花id