Ключ кластеризации поднимается до дерева с некластеризованным индексом на SQL сервере - PullRequest
0 голосов
/ 16 июня 2020

Кажется, что в SQL Server до версии 2019 ключ / ключи кластеризации идут вверх до древовидной структуры с не уникальным некластеризованным индексом. С более крупными и множественными ключами / ключами кластеризации вы получаете гораздо более широкое и высокое дерево, которое требует большего размера хранилища и объема памяти.

Из-за этого мы использовали для отделения PK от кластерного ключа, мои вопросы:

  1. Были ли SQL Server 2019 и Azure изменены в некластеризованном индексировании или нет?
  2. Кучи вообще не имеют ключа / ключей кластеризации, как происходит индексация в кучах?

1 Ответ

1 голос
/ 16 июня 2020

Изменены ли SQL Server 2019 и Azure в некластеризованном индексировании или нет

Это поведение старше, чем у многих людей на этом сайте.

Из-за этого мы использовали для отделения PK от кластеризованного

Это почти всегда ненужная микрооптимизация.

Кучи вообще не имеют ключа / ключей кластеризации, какой способ индексации в кучах

Некластеризованные неуникальные индексы всегда имеют указатель строк в качестве индекса ключи. Для куч локатором строк является ROWID (FileNo, PageNo, SlotNo).

Если вы хотите переместить строки с конечного уровня вашего широкого PK, это обычно для очень большой таблицы. И поэтому перемещение строк в кластерный индекс columstore может быть хорошим вариантом. Для этого просто отбросьте кластерный 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 уникальных индексов, индексов, поддерживающих внешний ключ, или индексов, которые должны поддерживать определенные c запросы. CCI обычно не требует большого количества индексов, поскольку его сканирование очень эффективно.

...