添加新列只是为了聚集 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.
- 删除和插入会让 table 变大。 [1]
- 除非数据在 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
处理死锁问题,我需要优化 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.
- 删除和插入会让 table 变大。 [1]
- 除非数据在 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