Tsql 添加新列只是为了拥有集群表

Tsql 添加新列只是为了拥有集群表,tsql,optimization,indexing,clustered-index,Tsql,Optimization,Indexing,Clustered Index,处理死锁问题时,我需要优化一个将guid列用作集群主键的表 我知道guid列对于聚集索引是一个错误的选择。所以我将主键集群更改为主键非集群。所以现在我有一堆,我不确定这会带来什么后果 我了解到集群表具有更好的性能,但没有其他列包含唯一值。因此,我考虑添加一个新的整数标识列,以获得聚集索引 但是,如果这个新列不用作外键或在查询中使用,它真的有用吗 如果我在其他表中使用新的identity列作为外键,而不是guid primary,这(至少在理论上)会更好吗 处理死锁问题 你能说些什么 所以现在我有

处理死锁问题时,我需要优化一个将guid列用作集群主键的表

我知道guid列对于聚集索引是一个错误的选择。所以我将主键集群更改为主键非集群。所以现在我有一堆,我不确定这会带来什么后果

我了解到集群表具有更好的性能,但没有其他列包含唯一值。因此,我考虑添加一个新的整数标识列,以获得聚集索引

但是,如果这个新列不用作外键或在查询中使用,它真的有用吗

如果我在其他表中使用新的identity列作为外键,而不是guid primary,这(至少在理论上)会更好吗

处理死锁问题

你能说些什么

所以现在我有一堆,我不确定这会带来什么后果

  • 删除和插入将使表变大
  • 除非数据位于非聚集索引中,否则必须对每个查询执行完整的表扫描。SQL无法将b树遍历到数据行
  • 我知道guid列对于聚集索引是一个错误的选择

    不一定是这样,如果您为碎片留出大量空间,这实际上可以加快插入速度(末尾的页面锁定减少),从而减少死锁

    因此,我考虑添加一个新的整数标识列,以获得聚集索引

    除非人们去寻找这个,否则它是没有用的。
    您的聚集索引是最重要的索引,因此它应该根据人们/程序经常查询的某些列进行排序。

    聚集索引不必是唯一的……Guid与标识是一个由来已久的争论,争论双方都有利弊。没有一个是所有情况下的最佳选择,因此归结为个人偏好。我的意思是,在这个表中,我真的没有更好的索引聚集选择。所以,如果我不希望我的表成为一个堆,那么添加一个新的标识列并将其用作聚集索引会有帮助吗?还是因为它太傻了,我应该让我的桌子变成一堆?