企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
来源:https://www.jb51.net/article/276641.htm 自增id :1 2 3 4 5…… uuid :UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符。通用唯一标识符的意思,可以以业务实际user id为主键 比如QQ号 手机号等 雪花id :相比UUID无序生成的id而言,雪花算法是有序的(有时间参数),而且都是由数字组成。雪花id最大为64位,符合java中long的长度64位。适用于大规模分布式 ### **自增id ** 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。当达到页面的最大填充因子时候(innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的 修改): ①下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序地记录填满,提升了页面的最大填充率,不会有页的浪费 ②新插入的行一定会在原有的最大数据行下一行,mysql定位和寻址很快,不会为计算新行的位置而做出额外的消耗 ③减少了页分裂和碎片的产生 优点: 1.自增,趋势自增,可作为聚集索引,提升查询效率 2.节省磁盘空间。500W数据,UUID占5.4G,自增ID占2.5G. 3.查询,写入效率高:查询略优。在数据量大时候 高于uuid插入速度 缺点: 1.导入旧数据时,可能会ID重复,导致导入失败。 2.分布式架构,多个Mysql实例可能会导致ID重复。 3.容易被外界攻破,知道业务实际情况。且例如:显示公告内容index?id=3这样就很容易被人篡改为index?id=2.就可以调到第二条的内容。 4对于高并发的负载,innodb在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点,因为所有的插入都发生在这里,并发插入会导致间隙锁竞争。Auto\_Increment锁机制会造成自增锁的抢夺,有一定的性能损失