从我的角度来看,如果我们谈论大型数据库(以及大量插入),使用UUID作为MySQL中的主键是个坏主意.
MySQL总是将主键创建为群集,并且没有选项可以将其关闭.
考虑到这一点,当您插入大量具有非顺序标识符(UUID)的记录时,数据库会碎片化,并且每个新插入都需要更多时间.
建议:使用带有GUID的PostgreSQL/MS-SQL/Oracle.对于MySQL使用整数(bigints).
UUID的主要缺点是,如果您想在之后返回记录以供进一步使用,则必须事先创建它们(即:在依赖的外键表中添加子记录):
INSERT INTO table (uuidfield, someotherfield) VALUES (uuid(), 'test'));
Run Code Online (Sandbox Code Playgroud)
不会让您看到新的UUID值是什么,并且由于您没有使用常规的auto_incremented主键,因此您无法使用last_insert_id()
它来检索它.您必须分两步完成:
SELECT @newuid := uuid();
INSERT INTO table (uuidfield, someotherfield) VALUES (@newuid, 'test');
INSERT INTO childtable ..... VALUES (@newuid, ....);
Run Code Online (Sandbox Code Playgroud)
我能想到的 PRO 是您的 ID 将是唯一的,不仅在您的表中,而且在数据库的所有其他表中。此外,它在世界上任何数据库的任何表中都应该是唯一的。
如果您的表语义需要该功能,则使用 UUID。否则,只需使用普通的 INT ID(更快、更容易处理、更小)。
归档时间: |
|
查看次数: |
10307 次 |
最近记录: |