自动增量PK的替代字段

时间:2017-12-13 20:47:09

标签: mysql database postgresql rest

在我的表格中,我在表格中使用自动增量PK,例如帖子和评论 我不想将PK暴露给HTTP客户端,但是,我仍然在我的API实现中使用它来执行快速查找。

当用户想要通过id检索帖子时,我希望在表格上有一个备用唯一键。 我想知道在这个领域使用什么样的最佳(最常见)方式 对我来说最明显的是使用UUID或GUID 我想知道是否有一种直接的方法来为此生成随机数字键而不是性能。

对于这种情况,您对最佳方法有何看法?

1 个答案:

答案 0 :(得分:0)

MySQL有一个函数,它生成一个128位的UUID,版本1,如RFC 4122中所述,并通过UUID格式的自定义将其作为带有破折号的十六进制字符串返回。

https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid

真正的UUID意味着在空间和时间上是全球唯一的。除非你需要一组独立的服务器来生成唯一值而没有一些中心唯一性​​验证,这通常会造成过度杀伤,这可能会造成瓶颈。

MySQL还有一个函数UUID_SHORT(),它生成一个64位的数值。这不符合RFC,但它可能对您的情况有用。

https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_uuid-short

阅读UUID_SHORT()实现的描述。由于高位很少改变,低位只是单调递增,因此避免了将随机UUID值插入索引所导致的性能和碎片问题。

UUID_SHORT值也适用于MySQL BIGINT UNSIGNED,而不必使用UNHEX()