UUID和自增主键

623 阅读1分钟

概述

  • 对比下使用UUDI 和 自增主键的优缺点

UUID

  • 缺点:
    • io:UUID由于主键是随机生成,插入的位置很有看了不在内存中缓存,将会产生大量的随机IO
    • 页分裂:由于插入是乱序的,而在 Innodb 的页上存储的数据是有序的,所以会频繁导致叶分裂,这时候会移动大量的数据
    • 磁盘空间占用大:生成新页后,可能在很长的一段时间内都不会产生新的插入操作
  • 优点:
    • 适合 分布式

自增主键

  • 优点
    • io:自增主键在插入的适合,有较大可能不会产生磁盘io,那个页已经在内存中了
    • 页分裂:大大减少页分裂的产生,由于是递增的,当某一页的达到最大填充因子(15/16)的时候,会自动生成新的页,不会发生数据的移动操作
    • 磁盘: 非常紧凑,每一页基本上都用满了才写下一页
  • 缺点
    • 分布式情况下较难实现
    • 一直解决方案是,多台机子,自增的数量不同,2台机子,每一台自增+2

折中

  • 雪花算法
  • 雪花算法可以在分布式情况下,通过时间戳保持自增,同时可以给不同的机子设定不同的序列号,近似于自增主键
  • 缺点:
    • 时间同步较为麻烦