我们有一个包含数亿行的巨大InnoDB表,只有3列:GUID、枚举和smallint。所有查找都是通过GUID完成的。
我们正在考虑将GUID作为PK并按键进行分区。
我们听说使用GUID作为PK很糟糕,因为它的随机分布和PK创建聚集索引。因此,以GUID的随机顺序存储行会增加碎片和页面拆分。
使用GUID作为PK的替代方法是创建一个自增的代理键,并将其用作PK。然而,如果我们想按GUID对表进行分区,那么GUID也必须成为PK的一部分。此外,由于所有查询都是通过GUID完成的,我们需要一个额外的GUID索引。该索引本质上将GUID映射到PK,而如果我们使用GUID作为PK,则表本身将映射GUID->枚举+small int?
因此,我的问题是,通过添加自动增量PK并具有额外的GUID索引,我们是否能获得任何好处?
谢谢, Philopator。
我们正在考虑将GUID作为PK并按键进行分区。
我们听说使用GUID作为PK很糟糕,因为它的随机分布和PK创建聚集索引。因此,以GUID的随机顺序存储行会增加碎片和页面拆分。
使用GUID作为PK的替代方法是创建一个自增的代理键,并将其用作PK。然而,如果我们想按GUID对表进行分区,那么GUID也必须成为PK的一部分。此外,由于所有查询都是通过GUID完成的,我们需要一个额外的GUID索引。该索引本质上将GUID映射到PK,而如果我们使用GUID作为PK,则表本身将映射GUID->枚举+small int?
因此,我的问题是,通过添加自动增量PK并具有额外的GUID索引,我们是否能获得任何好处?
谢谢, Philopator。