gpt4 book ai didi

mysql - 在大分区 MySQL 表中使用 GUID 作为 PK

转载 作者:可可西里 更新时间:2023-11-01 06:50:30 24 4
gpt4 key购买 nike

我们有一个巨大的 InnoDB 表,有数亿行,只有 3 列:GUID、enum、smallint。所有查找均由 GUID 完成。

我们正在考虑将 GUID 作为 PK 并按 KEY 对其进行分区。

我们听说使用 GUID 作为 PK 是不好的,因为它是随机分布的,而且 PK 会创建聚集索引。因此,以 GUID 的随机顺序存储行会增加碎片和页面拆分。

将 GUID 用作 PK 的替代方法是创建代理自动递增 key ,并将其用作 PK。但是,如果我们想按 GUID 对表进行分区,则该 GUID 也必须是 PK 的一部分。此外,由于所有查询都是由 GUID 完成的,因此我们需要一个额外的 GUID 索引。该索引本质上映射 GUID->PK,而如果我们使用 GUID 作为 PK - 表本身映射 GUID->enum+small int?

所以我的问题是我们是否通过添加 auto-inc PK 和具有额外的 GUID 索引获得任何好处?

谢谢,哲学家。

最佳答案

在 InnoDB 中使用 GUID 作为 PK 的问题不仅仅是 GUID 分布是随机的。 InnoDB 中的记录是按主键顺序存储的。这意味着在您正在谈论的表设计中,InnoDB 将不断移动数据以对您的 GUID 进行排序。您应该使用将 GUID 映射到 int 或 bigint 的转换表,并将其用作 PK。

关于mysql - 在大分区 MySQL 表中使用 GUID 作为 PK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445420/

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