永发信息网

UUID做主键,好还是不好

答案:1  悬赏:0  手机版
解决时间 2021-01-13 22:24
UUID做主键,好还是不好
最佳答案
有利有弊。
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。

使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着WEB服务等整合技术的发展,UUID的优势将更加明显。
使用MySQL的人,百分之九九以上的人会使用Autoincrement ID做主键,这是可以理解的,因为MySQL的自增ID效率很高,使用也很方便。那么剩下的百分之一的人使用什么做主键呢?可能是自己做的KeyGenerator,也可能是我们下面要说的UUID。
优点:

能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:

比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
使用UUID后,URL显得冗长,不够友好。
如果上面说的UUID的所谓缺点都不成立的话,那么是否使用UUID做主键,唯一的问题就是效率了。据说在PostgreSQL等数据库里,都有专门的UUID类型,在这样的数据库里,使用UUID做主键,效率没有任何问题,可惜在MySQL里没有这样的字段,如果想在MySQL里保存UUID做主键,一般是使用CHAr(36)来模拟,因为不是一个原生的UUID类型,所以主键的效率到底如何有待测试,另外,UUID做主键的效率和UUID本身的算法实现也有很大关系。

另外,对于InnoDB这种聚集主键类型的引擎来说,数据会按照主键进行排序,由于UUID的无序性,InnoDB会产生巨大的IO压力,此时不适合使用UUID做物理主键,可以把它作为逻辑主键,物理主键依然使用自增ID。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
“东坡先生杖履所至,几曾出现过低级而无趣的
求VB6.0 折叠菜单编写程序
姐妹们,我同时爱上了两个男人,该怎么办
模具中的枕位日语怎么说,谢谢
产后脱发会发生在产后4个月吗
一阵热,好像暖流流过一样是怎么回事
上山下疑读什么
1895元的底薪,八小时,一天是多少底薪呀,求
开着的灯泡碰到水了灭了怎么办?
单选题决定一个化学反应进行快慢的主要因素是
请问青岛人事考试中心(贵州路69号)从青岛火
踹影子可以看出我对影子是什么样的
瑞香的叶子下垂除了换盆换土还有别的补救方法
如何辨别食用油的品质?
佳能DR-3010C扫描仪驱动如何安装下载?附带下
推荐资讯
为什么肌肤需要抗糖化?
马利水粉颜料都有什么颜色
中国喀什至巴基斯坦拉合尔距离
幸福科达琳
记忆大师警察徒弟谁演的
BJD的妆面一定要按时卸妆换妆么?
南宋孝宗的亲生父母是谁?
汽车斯太尔指的是什么
怎么在扣扣上弄这种号啊啊,
听说身上有白斑真的不能吃维C吗?深圳怎么办
鑫苑·城市之家怎么样?好不好?值不值得买?
耐腐蚀水泵材质pp与PVDF,哪个好
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?