
调完Delphi的UUID生成部分,偶然发现了这篇文章。其中一些观点引发了我的思考,唯一遗憾的是全网均为转载,找不到真正的出处了。
我唯一还算熟悉的数据库就算是MySQL了,大概使用MySQL的人,百分之九九以上的人会使用Autoincrement ID做主键,这是可以理解的,因为MySQL的自增ID效率很高,使用也很方便。那么剩下的百分之一的人使用什么做主键呢?可能是自己做的KeyGenerator,也可能是我们下面要说的UUID。
据说在Oracle的圈子里,如果谁用自增ID做主键是要被鄙视的,主键最自然的选择就是UUID。我不了解Oracle,这些道听途说的结论是否正确不做承诺。
那么我们先看看什么是UUID?简单的说,UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
在UUID的算法中,可能会用到诸如网卡MAC地址,IP,主机名,进程ID等信息以保证其独立性。
如果你的MySQL版本不太老的话,键入 SELECT UUID(); 输出的就是UUID,如下:
mysql> select uuid()

文章讨论了UUID作为数据库主键的优缺点。UUID保证了唯一性和跨数据库迁移的兼容性,但可能占用更多空间且影响索引效率。在某些数据库系统如PostgreSQL中,UUID效率不成问题,但在MySQL中可能因非原生类型导致效率下降。对于InnoDB,UUID可能带来IO压力,适合作为逻辑主键,物理主键仍推荐自增ID。
833

被折叠的 条评论
为什么被折叠?



