簡體   English   中英

聚集鍵在 SQL 服務器中使用非聚集索引上升到樹

[英]Clustering key goes up to tree with non-clustered index in SQL Server

似乎在 2019 版之前的 SQL 服務器中,集群鍵/鍵上升到樹結構,沒有唯一的非聚集索引。 使用更大和多個集群鍵/鍵,您可以獲得更寬更高的樹,這會花費您更多的存儲大小和 memory 大小。

因此,我們曾經將PK與集群密鑰分開,我的問題是

  1. SQL Server 2019 和 Azure 在非聚集索引中是否發生了變化?
  2. 堆根本沒有聚類鍵/鍵,堆中的索引方式是什么?

是否在非聚集索引中更改了 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 通常不需要大量索引,因為它的掃描效率很高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM