Struttura degli heap

Un heap è una tabella per cui non è disponibile un indice cluster. Agli heap corrisponde una riga in sys.partitions con index_id = 0 per ogni partizione utilizzata dall'heap. Per impostazione predefinita, a ogni heap è associata una singola partizione. Se a un heap sono associate più partizioni, ognuna di esse ha una struttura di heap contenente i dati per la partizione specifica. Ad esempio, se a un heap sono associate quattro partizioni, saranno presenti quattro strutture di heap, una per ogni partizione.

A seconda dei tipi di dati dell'heap, ogni struttura di heap conterrà una o più unità di allocazione per l'archiviazione e la gestione dei dati di una partizione specifica. Ogni heap conterrà almeno un'unità di allocazione IN_ROW_DATA per partizione e inoltre un'unità di allocazione LOB_DATA per partizione, se l'heap include colonne LOB (Large Object). 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.

La colonna first_iam_page della vista di sistema sys.system_internals_allocation_units punta alla prima pagina IAM della catena che gestisce lo spazio allocato all'heap in una partizione specifica. SQL Server utilizza le pagine IAM per gli spostamenti all'interno dell'heap. Le pagine di dati e le righe in esse incluse non sono disposte in base a un ordine specifico e non sono collegate tra loro. L'unico collegamento logico tra le pagine di dati sono le informazioni registrate nelle pagine IAM.

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.

Le scansioni di tabella o le letture seriali dell'heap possono essere eseguite mediante la scansione delle pagine IAM allo scopo di individuare gli extent che includono le pagine dell'heap. Poiché le pagine IAM rappresentano gli extent nello stesso ordine in cui sono disposti nel file di dati, le scansioni seriali dell'heap vengono eseguite progressivamente in ogni file. Inoltre, se si imposta la sequenza di scansione tramite le pagine IAM, le righe dell'heap non vengono in genere restituite in base all'ordine in cui sono state inserite.

Nella figura seguente viene illustrato l'utilizzo delle pagine IAM in Motore di database di SQL Server per recuperare le righe di dati di un heap relativo a una singola partizione.

Le pagine IAM recuperano i dati in un singolo heap della partizione