Ispirato da questo post: https://twitter.com/#!/SQLChicken/status/102930436795285505
Heap: sono considerati una struttura di indice o sono rigorosamente una struttura di tabella senza indice?
Ispirato da questo post: https://twitter.com/#!/SQLChicken/status/102930436795285505
Heap: sono considerati una struttura di indice o sono rigorosamente una struttura di tabella senza indice?
Risposte:
Da MSDN - Organizzazione di tabelle e indici :
"Le tabelle di SQL Server utilizzano uno dei due metodi per organizzare le loro pagine di dati all'interno di una partizione:
Le righe di dati vengono archiviate in ordine in base alla chiave di indice cluster. L'indice cluster viene implementato come una struttura di indice B-tree che supporta il recupero rapido delle righe, in base ai valori delle chiavi dell'indice cluster. Le pagine di ciascun livello dell'indice, comprese le pagine di dati a livello foglia, sono collegate in un elenco doppiamente collegato. Tuttavia, la navigazione da un livello all'altro viene eseguita utilizzando i valori chiave.
Le righe di dati non sono memorizzate in alcun ordine particolare e non esiste un ordine particolare per la sequenza delle pagine di dati. Le pagine di dati non sono collegate in un elenco collegato. "
Heaps - Ottimizzazione di SQL Server :
"Una tabella heap, per definizione, è una tabella che non ha indici cluster. Diverse pagine della tabella basata su heap occupano diverse aree non contigue su un disco e non sono collegate tra loro in alcun modo."
A differenza di - Clustered Index Structures : "In SQL Server, gli indici sono organizzati come alberi B. Ogni pagina in un albero B indice è chiamata nodo indice. Il nodo superiore dell'albero B è chiamato nodo radice. il livello inferiore di nodi nell'indice è chiamato nodi foglia. Tutti i livelli di indice tra i nodi radice e foglia sono noti collettivamente come livelli intermedi. In un indice cluster, i nodi foglia contengono le pagine di dati della tabella sottostante . i nodi di livello intermedio contengono pagine di indice che contengono righe di indice. Ogni riga di indice contiene un valore chiave e un puntatore a una pagina di livello intermedio nella struttura ad albero B o a una riga di dati nel livello foglia dell'indice. l'indice è collegato in un elenco doppiamente collegato. "
Altre referenze:
Un indice implica che esiste un ordine di dati per le righe. Dato che un heap non viene creato con un tale ordine e non mantiene neanche un ordine, è solo un metodo per archiviare i dati della tabella.
Ci sono alcuni esempi (diciamo, dm_db_index_physical_stats ) dove specificare un heap, devi inserire un indice indice di 0. Mentre questo sembra contraddire ciò che ho appena detto, penso che questo sia solo un valore magico per semplificare l'API e il suo utilizzo; niente di più.
Struttura della tabella senza un indice cluster.