登录
首页 >  数据库 >  MySQL

MySQL使用自增ID索引和UUID索引的对比

来源:SegmentFault

时间:2023-02-24 18:58:15 149浏览 收藏

本篇文章向大家介绍《MySQL使用自增ID索引和UUID索引的对比》,主要包括MySQL、数据库,具有一定的参考价值,需要的朋友可以参考一下。

数据库自增主键ID

自增的主键的值是顺序的,所以存储引擎(MyISAM、InnoDB)把每一条记录都存储在一条记录的后面。当达到页面的最大填充因子时候(innodb默认的最大填充因子是页大小的15/16,会留出1/16的空间留作以后的修改)

优点:
  1. 下一条记录就会写入新的页中,一旦数据按照这种顺序的方式加载,主键页就会近乎于顺序的记录填满,提升了页面的最大填充率,不会有页的浪费;
  2. 新插入的行一定会在原有的最大数据行下一行,mysql定位和寻址很快,不会为计算新行的位置而做出额外的消耗;
  3. 减少了页分裂和碎片的产生。
缺点:
  1. 因为自增ID步进值是固定的,如果别人爬取数据库,会获取到业务增长信息,从而分析出经营情况;
  2. 如果在并发情况下写入,自增主键的上界会造成明显的锁挣用,并发插入会导致间隙锁竞争;
  3. Auto_Increment锁机制会造成自增锁的抢夺,有一定的性能损失。

UUID的索引

  1. 数据生成没有规律,无法做到按顺序存储;
  2. 写入的目标页很可能已经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,在插入之前存储引擎不得不先找到并从磁盘读取目标页到内存中,这将导致大量的随机IO;
  3. 因为写入是乱序的,存储引擎不得不频繁的做页分裂操作,以便为新的行分配空间,页分裂导致移动大量的数据,一次插入最少需要修改三个页以上;
  4. 由于频繁的页分裂,页会变得稀疏并被不规则的填充,最终会导致数据会有碎片

好了,本文到此结束,带大家了解了《MySQL使用自增ID索引和UUID索引的对比》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表