di: Francesco Quaratino 15 Gennaio 2008
Tutti i moderni RDBMS (Relational Database Management System) prevedono la creazione di indici su tabelle (e talvolta anche su viste di tabelle) per velocizzare le interrogazioni. In questo articolo analizzeremo l'architettura degli indici adottati da MS-SQL Server 2005 passandone in rassegna i diversi tipi. L'articolo non intende suggerire linee guida per l'ottimizzazione degli indici, ma fornisce, altresì, le conoscenze basilari per comprendere alcune delle più comuni e diffuse best practices in tema ottimizzazione.
SQL Server 2005 implementa gli indici con la struttura B+Tree, standard de facto nel panorama dei database relazionali. Quando si parla di indici, il pensiero va naturalmente all'indice dei libri, grazie ai quali siamo in grado di "saltare" a una determinata pagina da cui inizia un certo capitolo o paragrafo, oppure ai glossari spesso presenti alla fine dei libri, con i quali si è in grado di "saltare" a tutte le pagine che contengono una determinata parola.
Va subito precisato che un indice B+Tree non ha nulla a che vedere con questi indici a noi tanto comuni, se non il fatto che velocizzano la ricerca della parola cercata. Essi, infatti, rappresentano indici a un solo livello (al più ordinati come nel caso del glossario), condizione per cui permettono una ricerca di tipo sequenziale dalla prima all'ultima voce, o di tipo binario secondo il noto algoritmo omonimo che ripartisce in due, di volta in volta, l'elenco ordinato di voci da confrontare con la voce cercata.
Gli indici B+Tree sono, invece, multi-livello e sono basati sulla struttura dati nota col nome di "albero binario di ricerca bilanciato", rappresentato come un insieme di nodi, dove da ognuno di essi partono sempre due "frecce" che giungono ognuna ad un altro nodo, mentre una sola freccia giunge al singolo nodo. Fanno eccezione il nodo radice, a cui non giunge alcuna freccia, e i nodi foglia dell'albero da cui non partone frecce. Una freccia rappresenta un puntatore e quindi un legame tra un nodo e l'altro, che di fatto permette la navigazione dell'indice riducendo drasticamente il numero massimo di confronti per giungere alla voce cercata in elenco.
In un indice B+Tree, ogni nodo che non sia foglia, rappresenta un blocco (o pagina) di dati (ovvero l'allocazione minima di memoria su disco) contenente alcune voci indicizzate in ordine alfabetico, dove a ciascuna voce è associato un puntatore a un nodo di livello inferiore. Al livello foglia troviamo, invece, tutte le voci indicizzate in ordine alfabetico, con associato un puntatore al blocco di disco che contiene l'intera riga di tabella.
|
SQL Maintenance Solution: soluzione free per la manutenzione di SQL Server |
Guida AccessIniziare a sviluppare database grazie alla potenza visuale offerta... |
Guida SQL Server 2005L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito... |
Guida OracleScoprire ed approfondire un dei più importanti RDBMS sulla scena... |
Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.
Iscriviti alla newsletter