首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的主键: INT(n)或UUID as varchar(36)

MySQL中的主键: INT(n)或UUID as varchar(36)
EN

Stack Overflow用户
提问于 2010-04-19 05:10:17
回答 4查看 10.5K关注 0票数 4

在MySQL中使用UUID作为主键有意义吗?

除了手动查询的麻烦之外,使用UUID而不是常规INT的优缺点是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-19 22:29:46

UUID的主要缺点是,如果您想要在以后引用该记录以供进一步使用(即:在依赖的外键数据表中添加子记录),则必须事先创建它们:

代码语言:javascript
复制
INSERT INTO table (uuidfield, someotherfield) VALUES (uuid(), 'test'));

我不会让您看到新的UUID值是什么,而且由于您没有使用常规的auto_incremented主键,所以不能使用last_insert_id()来检索它。你必须通过两个步骤来完成:

代码语言:javascript
复制
SELECT @newuid := uuid();
INSERT INTO table (uuidfield, someotherfield) VALUES (@newuid, 'test');
INSERT INTO childtable ..... VALUES (@newuid, ....);
票数 6
EN

Stack Overflow用户

发布于 2012-04-30 03:17:08

在我看来,使用UUID作为MySQL中的主键不是一个好主意,如果我们谈到大型数据库(以及大量的插入)。

MySQL始终将主键创建为集群,并且没有关闭它的选项。

考虑到这一点,当您插入大量具有非顺序标识符(UUID)的记录时,数据库会出现碎片,并且每次新插入都会花费更多时间。

建议:使用带有GUID的PostgreSQL / MS-SQL / Oracle。对于MySQL,使用int(Bigint)。

票数 9
EN

Stack Overflow用户

发布于 2010-04-19 05:14:32

我能想到的好处是,您的ID将是唯一的,不仅在您的表中,而且在数据库的每个其他表中也是如此。此外,它在世界上任何数据库中的任何表中都应该是唯一的。

如果您的表语义需要该特性,则使用UUID。否则,只需使用普通的INT (更快,更容易处理,更小)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2663976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档