Strutture degli indici cluster

In SQL Server gli indici sono organizzati in alberi B. Ogni pagina dell'albero B di un indice viene definita nodo. Il nodo di livello superiore dell'albero B viene definito nodo radice. I nodi di livello inferiore dell'indice vengono definiti nodi foglia. I livelli dell'indice compresi tra il nodo radice e i nodi foglia vengono definiti livelli intermedi. In un indice cluster il livello foglia include le pagine di dati della tabella sottostante. I nodi di livello radice e intermedio contengono pagine di indice che includono le righe dell'indice. Ogni riga di indice contiene un valore di chiave e un puntatore a una pagina di livello intermedio nell'albero B o a una riga di dati nel livello foglia dell'indice. Le pagine di ogni livello dell'indice sono collegate in un elenco collegato doppiamente.

Gli indici cluster includono una riga in sys.partitions, con index_id = 1 per ogni partizione utilizzata dall'indice. Per impostazione predefinita, un indice cluster include una singola partizione. Quando in un indice cluster sono incluse più partizioni, ogni partizione ha un albero B contenente i dati per la partizione specifica. Se, ad esempio, un indice cluster include quattro partizioni, vi sono quattro alberi B, una in ogni partizione.

In base al tipo di dati nell'indice non cluster, ogni struttura dell'indice non cluster avrà una o più unità di allocazione in cui archiviare e gestire i dati per una partizione specifica. Ogni indice cluster conterrà almeno un'unità di allocazione IN_ROW_DATA per partizione e anche un'unità di allocazione LOB_DATA per partizione se contiene colonne LOB. Conterrà inoltre un'unità di allocazione ROW_OVERFLOW_DATA per partizione, se include colonne a lunghezza variabile che superano il limite della lunghezza di riga di 8.060. Per ulteriori informazioni sulle unità di allocazione, vedere Organizzazione di tabelle e indici.

Le pagine nella catena di dati e le righe incluse nelle pagine vengono ordinate in base al valore della chiave dell'indice cluster. Tutti gli inserimenti vengono eseguiti in corrispondenza del punto in cui il valore di chiave della riga inserita rientra nella sequenza di ordinamento tra righe esistenti. Le raccolte di pagine per l'albero B sono ancorate tramite i puntatori delle pagine nella vista di sistema sys.system_internals_allocation_units.

Nota importanteImportante

La vista di sistema sys.system_internals_allocation_units è riservata per il solo uso interno a MicrosoftSQL Server. Non è garantita la compatibilità con le versioni future.

Per un indice cluster, la colonna root_page in sys.system_internals_allocation_units punta al livello superiore dell'indice cluster per una partizione specifica. Tramite SQL Server l'indice viene spostato verso il basso per trovare la riga corrispondente a una chiave dell'indice cluster. Per trovare un intervallo di chiavi, tramite SQL Server viene esplorato l'indice per individuare il valore di chiave iniziale dell'intervallo e quindi viene eseguita la scansione delle pagine di dati utilizzando il puntatore precedente o successivo. Per trovare la prima pagina nella catena di pagine di dati, SQL Server segue i puntatori più a sinistra rispetto al nodo radice dell'indice.

Nella figura seguente viene illustrata la struttura di un indice cluster in una singola partizione.

Livelli di un indice cluster