似乎在 2019 版之前的 SQL Server 中,集群键/键上升到不具有唯一非聚集索引的树结构。使用更大和多个集群键/键,您可以获得更宽更高的树,这会花费您更多的存储大小和内存大小。
因此,我们曾经与PK
聚集键分开我的问题是
- SQL Server 2019 和 Azure 在非聚集索引方面是否发生了变化?
- 堆根本没有聚类键/键,堆中的索引方式是什么?
似乎在 2019 版之前的 SQL Server 中,集群键/键上升到不具有唯一非聚集索引的树结构。使用更大和多个集群键/键,您可以获得更宽更高的树,这会花费您更多的存储大小和内存大小。
因此,我们曾经与PK
聚集键分开我的问题是
SQL Server 2019 和 Azure 是否更改了非聚集索引
这种行为比本网站上的许多人都早。
因此,我们曾经将 PK 与集群分开
这是几乎总是不必要的微优化。
堆根本没有聚类键/键,堆中的索引方式是什么
非聚集非唯一索引始终将行定位器作为索引键。对于堆,行定位符是 ROWID (FileNo,PageNo,SlotNo)。
如果要将行从宽 PK 的叶级别移出,通常适用于非常大的表。因此,将行移动到聚集的列存储索引可能是一个不错的选择。为此,只需删除集群 PK(这会将叶级别保留为堆),创建 CCI,然后将 PK 重新创建为非集群 PK。例如
drop table if exists t
go
create table t(id int not null, a int, b int)
alter table t
add constraint pk_t
primary key clustered(id)
go
alter table t drop constraint pk_t
create clustered columnstore index cci_t on t
alter table t
add constraint pk_t
primary key nonclustered (id)
如果您有其他非聚集索引,请先删除它们,如果您确实需要,仅在后面重新创建它们。IE 唯一索引、支持外键的索引或索引需要支持特定的查询。CCI 通常不需要大量索引,因为它的扫描效率很高。