在SQL Server中,聚类键与非聚类索引上树。

问题描述 投票:0回答:1

似乎在2019版本之前的SQL Server中,集群keykeys上升到树形结构,非集群索引不唯一。有了更大的和多个集群key,你会获得更宽更高的树,花费你更多的存储大小和内存大小。

正因为如此,我们曾经将 PK 从聚类钥匙我的问题是

  1. SQL Server 2019和Azure在非集群索引方面到底有没有变化?
  2. 堆里根本没有集群化keykey,堆里的索引是什么方式?
sql-server azure heap non-clustered-index sql-server-2019
1个回答
1
投票

SQL Server 2019和Azure在非集群索引方面到底有没有变化

这种行为比这个网站上的很多人都要老。

正因为如此,我们曾经将PK与群组分开。

这几乎是一个不需要的微优化。

堆根本就没有聚类键,堆中的索引是什么方式呢

非集群非唯一索引总是以行定位符作为索引键。 对于堆来说,行定位符是ROWID(FileNo,PageNo,SlotNo)。

如果你想把行从你的宽PK的叶级移出来,一般是针对一个非常大的表。 而因此将行移到一个集群的columstore索引中也是一个不错的选择。 要做到这一点,只需放弃集群PK(这将使叶级作为一个堆),创建CCI,然后重新创建PK作为一个非集群PK。 eg

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一般不需要很多索引,因为它的扫描效率很高。

© www.soinside.com 2019 - 2024. All rights reserved.