Se la tabella stessa è cluster , quindi tutti gli indici secondari contengono una copia della chiave di clustering (una chiave che determina l'ordine fisico delle righe nella tabella cluster).
Il motivo:le righe in una tabella raggruppata sono archiviate fisicamente all'interno di un albero B (non l'heap della tabella) e quindi possono spostarsi quando i nodi dell'albero B vengono divisi o uniti, quindi l'indice secondario non può contenere solo il "puntatore" di riga (poiché rischierebbe di "pendolare" dopo che la riga si è spostata).
Spesso ciò ha un effetto negativo sulle prestazioni:l'esecuzione di query tramite l'indice secondario può richiedere una doppia ricerca :
- In primo luogo, cerca nell'indice secondario e ottieni la chiave di clustering.
- In secondo luogo, in base alla chiave di cluster recuperata sopra, cerca nella tabella cluster stessa (che è B-tree).
Tuttavia, se tutto ciò che desideri sono i campi della chiave di clustering, è necessaria solo la prima ricerca.
Alias "indice cluster" in MS SQL Server.
Di solito, ma non necessariamente, una CHIAVE PRIMARIA in MS SQL Server.
È un peccato che il clustering sia attivo per impostazione predefinita in MS SQL Server:le persone spesso lasciano semplicemente l'impostazione predefinita senza considerare completamente i suoi effetti. Quando il clustering non è appropriato, devi specificare esplicitamente la parola chiave NONCLUSTERED per disattivarla.