Изменены ли 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 обычно не требует большого количества индексов, поскольку его сканирование очень эффективно.