添加新列只是为了聚集 table

Add new column just to have clustered table

处理死锁问题,我需要优化 table,它使用 guid 列作为聚集主键。

我知道 guid 列不适合用于聚集索引。所以我把聚簇的主键改成了非聚簇的主键。所以现在我有一个堆,我不确定这样做的后果。

我读到集群 table 具有更好的性能,但没有其他列包含唯一值。所以我正在考虑添加一个新的整数标识列只是为了有一个聚集索引。

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

如果我在其他 table 中使用新的标识列作为外键而不是主要的 guid,会不会(至少在理论上)更好?

Working on deadlock problems

关于这个你能说些什么?

So now I have a heap and I’m not sure about the consequence of this.

  1. 删除和插入会让 table 变大。 [1]
  2. 除非数据在 non-clustered 索引中,否则您必须对每个查询进行完整 table 扫描。 SQL 无法遍历 b-tree 到您的数据行。

I know guid column is a bad choice for clustered index.

不一定是这种情况,如果您为碎片留下很多 space,这实际上可以加快插入速度(末尾的页面锁定更少),从而导致更少的锁定。编辑:SQL Server 2019 对“末尾的页面锁定更少”进行了优化。[2]

So I was thinking of adding a new integer identity column just to have a clustered index.

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

[1] why-does-my-heap-have-a-bunch-of-empty-pages
[2] MS docs