数据库自增主键 ID
自增的主键的值是程序的,所以存储引擎(MyISAM、InnoDB)把每一条记录都存储在一条记录的前面。当达到页面的最大填充因子时候 (innodb 默认的最大填充因子是页大小的 15/16,会留出 1 /16 的空间留作当前的批改)
长处:
- 下一条记录就会写入新的页中,一旦数据依照这种程序的形式加载,主键页就会近乎于程序的记录填满,晋升了页面的最大填充率,不会有页的节约;
- 新插入的行肯定会在原有的最大数据行下一行,mysql 定位和寻址很快,不会为计算新行的地位而做出额定的耗费;
- 缩小了页决裂和碎片的产生。
毛病:
- 因为自增 ID 步进值是固定的,如果他人爬取数据库,会获取到业务增长信息,从而剖析出经营状况;
- 如果在并发状况下写入,自增主键的上界会造成显著的锁挣用,并发插入会导致间隙锁竞争;
- Auto_Increment 锁机制会造成自增锁的争夺,有肯定的性能损失。
UUID 的索引
- 数据生成没有法则,无奈做到按顺序存储;
- 写入的指标页很可能曾经刷新到磁盘上并且从缓存上移除,或者还没有被加载到缓存中,在插入之前存储引擎不得不先找到并从磁盘读取指标页到内存中,这将导致大量的随机 IO;
- 因为写入是乱序的,存储引擎不得不频繁的做页决裂操作,以便为新的行调配空间,页决裂导致挪动大量的数据,一次插入起码须要批改三个页以上;
- 因为频繁的页决裂,页会变得稠密并被不规则的填充,最终会导致数据会有碎片