Abr*_*mJP 10 sql sql-server clustered-index
我有一个存储员工详细信息的SQLServer表,列ID是GUID类型,而EmployeeNumber列是INT类型.大多数时候,我会在加入和选择条件时处理EmployeeNumber.
我的问题是,在ClusteredIndex为EmployeeNumber时,将PrimaryKey分配给ID列是否合理?
是的,可以拥有非群集主键,并且可以拥有与主键完全无关的群集密钥.默认情况下,主键也可以成为聚簇索引键,但这不是必需的.
主键是一个逻辑概念:是数据模型中用于引用实体的键.
聚集索引键是物理概念:是您希望将行存储在磁盘上的顺序.
选择不同的集群密钥是由多种因素驱动的,例如当您需要比主键更窄的集群密钥时的密钥宽度(因为集群密钥在每个非集群索引中被复制.或支持频繁范围扫描(常见于时间序列)当经常使用类似的查询访问数据时date between '20100101' and '20100201'(聚合索引键date将是合适的).
此主题之前已经讨论过这个问题,请参阅聚集索引应该放在哪一列?.
理想的聚簇索引键是:
一般来说,将GUID用作聚簇索引键是一个非常糟糕的主意,因为它会在添加行时导致更多碎片.
编辑清晰度:
PK和Clustered键确实是单独的概念.您的PK不需要是您的聚集索引键.
在我自己的实际应用中,与PK相同的字段应该/将成为您的群集密钥,因为它符合上面列出的相同条件.