gpt4 book ai didi

mysql - 如何在 MySQL 中将 GUID/UUID 设置为主键(而非集群键)?

转载 作者:行者123 更新时间:2023-11-29 06:32:44 24 4
gpt4 key购买 nike

我使用 GUID/UUID 作为主键的原因:跨设备同步数据。我在服务器上有一个主数据库,然后每个设备都有自己的具有相同结构的数据库(尽管引擎不同。服务器上的 MySQL,Android 设备上的 SQLite 等)。

我已经 read that if you're going to use GUID's as your primary key, it should at least not be the clustering key.但是,我找不到如何用 MySQL 做到这一点。我能找到的就是this reference也就是说,如果你有一个主键,InnoDB 将使用它作为集群键。

我错过了什么吗?

最佳答案

您链接到的文章是关于 Microsoft SQL Server 的,它让您可以选择将哪个索引用作聚簇键。

使用 MySQL 的 InnoDB 存储引擎,您别无选择。主键始终用作集群键。如果没有主键,则它使用第一个非空唯一键。如果没有任何此类唯一键,InnoDB 会生成自己的内部 6 字节键作为聚类键。

因此,您可以制作一个使用 GUID 作为非唯一键的表,但实际上将其用作候选键。

CREATE TABLE MyTable (
guid CHAR(32) NOT NULL,
/* other columns... */
KEY (guid) -- just a regular secondary index, neither primary nor unique
);

但是,集群 key 有合法用途。如果您经常根据 GUID 进行查找,那么使用 GUID 作为聚簇键会更高效。

使用 GUID 作为集群键的问题主要是空间问题。插入聚集索引的中间可能会导致一些碎片,但这在 MySQL 中不一定是一个大问题。

另一个问题是,在 InnoDB 中,二级索引隐式包含主键,因此 CHAR(32) 或您用来存储 GUID 的任何内容都将附加到其他索引中的每个条目。与使用整数作为主键相比,这会使它们占用更多空间。

关于mysql - 如何在 MySQL 中将 GUID/UUID 设置为主键(而非集群键)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26916132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com