Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

In che modo un indice non cluster può generare una colonna che non è inclusa nell'indice

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.