Mysql 外键的UUID

Mysql 外键的UUID,mysql,sql,database,Mysql,Sql,Database,为什么UUID被用作主键?它们需要大量内存来存储。据我所知,它们被用作主键,因为生成的每个值都是唯一的,这在合并两个数据库时很有用,因为不会发生冲突 如果UUID用于API端点猜测的隐私,为什么不使用、ID、数据库号,然后将它们作为主键进行散列?然后该ID可以用于关系,这很方便。ID和数据库号的散列值都可用于主键,使用ID搜索数据项的速度也比UUID快。通用唯一ID(UUID)主要用于: 在各种系统中生成标识符,而无需与中央机构(如数据库服务器中的序列号生成器)进行协调 在系统(如联合数据库)

为什么UUID被用作主键?它们需要大量内存来存储。据我所知,它们被用作主键,因为生成的每个值都是唯一的,这在合并两个数据库时很有用,因为不会发生冲突

如果UUID用于API端点猜测的隐私,为什么不使用、ID、数据库号,然后将它们作为主键进行散列?然后该ID可以用于关系,这很方便。ID和数据库号的散列值都可用于主键,使用ID搜索数据项的速度也比UUID快。

通用唯一ID(UUID)主要用于:

  • 在各种系统中生成标识符,而无需与中央机构(如数据库服务器中的序列号生成器)进行协调
  • 在系统(如联合数据库)之间共享数据记录,而不存在冲突风险
据我所知,您关于API端点猜测隐私的观点最初并不是一个设计目标。但这可能是当代基于URL的访问方法的另一个特点

UUID实际上是一个128位的值。不要将其与通常用于向人类显示的36个字符的十六进制字符串混为一谈

对于支持UUID作为数据类型的数据库,例如Postgres,使用UUID数据类型的密钥使用的内存和存储空间是64位整数序列号的两倍,或者是32位整数(40亿范围)的四倍,这是代理密钥通常的另一种选择。这是否“很多”是每个数据库设计者需要做出的判断。考虑到在现代计算硬件中内存和存储空间是多么便宜和容易获得,我通常认为UUID的好处非常值得额外的内存/存储。
如果需要通用唯一id,请使用通用唯一id(UUID)。没有必要发明你自己的

“为什么不改为拥有、ID、数据库号,然后将它们作为主键进行散列?”因为这样可能会有重复项。如果将它们存储为二进制,则UIDS需要16字节的存储空间,这并不“很多”。大多数散列即使没有更大的存储需求,也有类似的需求。UUID的搜索惩罚是什么?惩罚是什么?B-树索引(最常见的情况是AFAIK)的搜索复杂度是O(logn),无论它是什么类型,这能回答您的问题吗?