在MySQL中使用UUID作为主键有意义吗?
除了手动查询的麻烦之外,使用UUID而不是常规INT的优缺点是什么?
发布于 2010-04-19 22:29:46
UUID的主要缺点是,如果您想要在以后引用该记录以供进一步使用(即:在依赖的外键数据表中添加子记录),则必须事先创建它们:
INSERT INTO table (uuidfield, someotherfield) VALUES (uuid(), 'test'));我不会让您看到新的UUID值是什么,而且由于您没有使用常规的auto_incremented主键,所以不能使用last_insert_id()来检索它。你必须通过两个步骤来完成:
SELECT @newuid := uuid();
INSERT INTO table (uuidfield, someotherfield) VALUES (@newuid, 'test');
INSERT INTO childtable ..... VALUES (@newuid, ....);发布于 2012-04-30 03:17:08
在我看来,使用UUID作为MySQL中的主键不是一个好主意,如果我们谈到大型数据库(以及大量的插入)。
MySQL始终将主键创建为集群,并且没有关闭它的选项。
考虑到这一点,当您插入大量具有非顺序标识符(UUID)的记录时,数据库会出现碎片,并且每次新插入都会花费更多时间。
建议:使用带有GUID的PostgreSQL / MS-SQL / Oracle。对于MySQL,使用int(Bigint)。
发布于 2010-04-19 05:14:32
我能想到的好处是,您的ID将是唯一的,不仅在您的表中,而且在数据库的每个其他表中也是如此。此外,它在世界上任何数据库中的任何表中都应该是唯一的。
如果您的表语义需要该特性,则使用UUID。否则,只需使用普通的INT (更快,更容易处理,更小)。
https://stackoverflow.com/questions/2663976
复制相似问题