目录
[TOC]
1. 版本说明
基于mysql版本:5.6.27
mysql数据库引擎:InnoDb
2. 说明
InnoDb的索引特性,导致的自增id做主键是效率最高的。
- 存储上自增id占用的存储空间比uui小。
- InnoDb在存在主键的情况下,使用主键建立
聚簇索引
,InnoDb的聚簇索引建立的B+树节点,索引和数据在一起
(对应的数据为主键内容),通过节点中存储的主键进行关联行数据信息而二级索引信息。 - uuid占用空间比自增主键大,会导致建立的索引占用空间大,检索慢。
- InnoDb在存在主键的情况下,使用主键建立
- 在存储和检索的时候,InnoDb会对主键进行
物理排序
。- 自增主键后插入的主键位置总是在最后。
- uuid是随机生成的,每次插入的主键位置是不确定的,会进行主键的
物理排序
,会造成大量的IO操作
,从而影响数据库效率。 - uuid在数据大量插入的时候,读写性能下降非常厉害。同时因为数据的物理重新排序,会生成大量的
磁盘碎片
,占用磁盘空间。
3. 场景选型
- 单节点情况下,主键生成策略
首选自增ID
,性能高于uuid,磁盘占用少。 - 分布式架构场景,可以在购买较多存储、降低部分性能的基础上,使用uuid。从而减少主键的生成成本(
存在多个分布式写库的时候,使用自增主键的情况下,为了避免多个库之间主键生成重复,将耗费大量的技术成本
)。
网友评论