Phi*_*tor 6 mysql indexing guid clustered-index
我们有一个巨大的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。
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |