繁体   English   中英

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

[英]Using GUID as PK in big partitioned MySQL table

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

我们正在考虑将GUID作为PK并将其按BY键分区。

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

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

所以我的问题是我们是否通过添加auto-inc PK并获得额外的GUID索引来获得任何收益?

谢谢,Philopator。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM