雪花ID和UUID自增主键做 MySQL主键
创作时间:
作者:
@小白创作中心
雪花ID和UUID自增主键做 MySQL主键
引用
1
来源
1.
https://www.cnblogs.com/KL2016/p/18798004
使用uuid和自增id的索引结构对比.
使用自增id的内部结构
自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面。当达到页面的最大填充因子时候(innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的 修改):
- 下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满,提升了页面的最大填充率,不会有页的浪费
- 新插入的行一定会在原有的最大数据行下一行,mysql定位和寻址很快,不会为计算新行的位置而做出额外的消耗
- 减少了页分裂和碎片的产生
使用uuid的索引内部结构
因为uuid相对顺序的自增id来说是毫无规律可言的,新行的值不一定要比之前的主键的值要大,所以innodb无法做到总是把新行插入到索引的最后,而是需要为新行寻找新的合适的位置从而来分配新的空间。这个过程需要做很多额外的操作,数据的毫无顺序会导致数据分布散乱,将会导致以下的问题:
- 写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,innodb在插入之前不得不先找到并从磁盘读取目标页到内存中,这将导致大量的随机IO。
- 因为写入是乱序的,innodb不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上
- 由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片
使用自增id的缺点
- 别人一旦爬取你的数据库,就可以根据数据库的自增id获取到你的业务增长信息,很容易分析出你的经营情况
- 对于高并发的负载,innodb在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点,因为所有的插入都发生在这里,并发插入会导致间隙锁竞争
- Auto_Increment锁机制会造成自增锁的抢夺,有一定的性能损失
热门推荐
硅胶枕头助你科学枕姿一夜好眠
乳胶枕头真的能拯救颈椎病吗?
冬季护眠神器:选对枕头告别失眠
银杏果能吃吗?
用联想记忆法记住"funny",你get了吗?
三清山徒步攻略:巨蟒出山、东方女神等经典景观详解
三清山:1819米玉京峰俯瞰云海日出,3600米高空栈道观奇石
三清山攻略:东方女神、云端栈道,四大景区精华游
晋代葛洪开山,三清山成道教文化圣地
负压鱼缸:原理、优缺点及制作方法详解
跟紧健身潮,科学降低体脂率
鸡胸肉沙拉的创意搭配与美味秘诀
平均海拔5000米,定日县气候特征与旅游指南
登顶珠峰60年后,定日县成为高原旅游新热点
甘草片新用途:抗炎护胃效果好,但需遵医嘱服用
山东冬季自驾游,这些景点火遍全网!
甘草片镇咳效果显著,但不宜长期服用
每天一杯枸杞茶,8种搭配方案改善亚健康
降脂药瑞舒伐他汀钙片:停药标准因人而异,医生评估是关键
服用他汀类药物需定期监测肝功能,转氨酶升高3倍内安全
服用瑞舒伐他汀钙需定期监测,这四种情况应及时停药
药物治疗加环境消毒,专家详解疥疮根治方案
疥疮治疗指南:5类药物配合生活护理
乳杆菌益生菌选购指南:科学吃出健康肠道
武汉大学张先正团队:益生菌攻克胰腺癌新突破
中医专家详解:黄精种植技巧与管理要点
黄精:中医界的超级补益神器
京城滑雪地图:10大滑雪场特色全解析,总有一款适合你
北京入冬偏晚4天,今冬气温偏高但冷暖起伏大
中英之间的跨语际文艺实践,从《蒋彝和他的文友》说起