MySQL--”自然键”和”代理键”优缺点

在数据库表设计中会纠结于”自然键”和”代理键”的选择,自然键在实现数据“软删除”时实现比较复杂,部分自然键因为键值过长或多列组合导致不适合作为表主键,而比较常见两种代理键为自增列(auto incremnet)和全局唯一标识列(GUID)。


使用自增列作为主键的优缺点:

1、    主键键值长度短,INT列需要4个字节,BIGINT列需要8个字节;
2、    自增主键顺序递增,在INSERT操作时”顺序”写入表;
3、    由于数据集中插入到表尾部,在高并发情况下容易造成”数据页热点”,影响插入效率;
4、    自增主键只能保证在表内数据唯一,对于分库分表场景,可能因错误操作产生相同的“唯一值”。


使用GUID列的优缺点:

1、    32位GUID字符串需要更多的存储空间来存放(具体存储长度与字符集相关),影响主键和其他索引的查询性能。
2、    GUID可实现全局唯一,能保证在多个表之间的数据唯一性
3、    GUID将数据分散到全表,不会产生热点数据页,但会造成大量随机IO读写

在实际使用过程中,很少场景会使用GUID作为主键,大部分业务按照数据量需求使用INT或BIGINT的自增列作为主键,对于需要多表唯一的场景可以通过程序实现全局唯一的自增ID。



原文地址:https://www.cnblogs.com/gaogao67/p/10392715.html