Strutture degli indici cluster
In SQL Server gli indici sono organizzati in strutture b-tree. Ogni pagina della struttura b-tree di un indice viene definita nodo. Il nodo di livello superiore della struttura b-tree viene definito nodo principale. I nodi di livello inferiore dell'indice vengono definiti nodi foglia. I livelli dell'indice compresi tra il nodo principale 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 principale 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 nella struttura b-tree 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 una struttura b-tree contenente i dati per la partizione specifica. Se, ad esempio, un indice cluster include quattro partizioni, vi sono quattro strutture b-tree, 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. Gli insiemi di pagine per la struttura b-tree sono ancorati tramite i puntatori delle pagine nella vista di sistema sys.system_internals_allocation_units.
Importante: |
---|
La vista di sistema sys.system_internals_allocation_units è solo per uso interno ed è soggetta a modifiche. Non è garantita la compatibilità. |
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 principale dell'indice.
Nella figura seguente viene illustrata la struttura di un indice cluster in una singola partizione.
Vedere anche
Concetti
Struttura degli heap
Strutture degli indici non cluster
Organizzazione di tabelle e indici