Indicizzazione nei DBMS: Cos'รจ, Tipologie di Indici con ESEMPI

โšก Riepilogo intelligente

L'indicizzazione nei database รจ una tecnica di strutturazione dei dati che consente di recuperare rapidamente i record tramite mappatura.ping una chiave di ricerca all'indirizzo del disco del suo record. Gli indici primari, secondari, di clustering, multilivello e B-tree gestiscono in modo diverso lo spazio commerciale, la velocitร  e la manutenzione.

  • ๐Ÿ—‚๏ธ Idea centrale: Un indice รจ una piccola tabella a due colonne che associa a una chiave un puntatore al blocco di disco del record.
  • ๐Ÿ“‡ Indice primario: Un file ordinato sulla chiave, suddiviso in varianti dense e sparse.
  • ๐Ÿ”Ž Denso contro sparso: Un indice denso memorizza una voce per ogni chiave; un indice sparso memorizza un numero inferiore di voci per risparmiare spazio.
  • ๐Ÿท๏ธ Indice secondario: Costruito su un campo non ordinante, utilizza dei bucket per raggiungere ogni record corrispondente.
  • ๐Ÿ“š ClusterIndice: Raggruppa in un unico cluster le righe che condividono una chiave non univoca.
  • ๐ŸŒณ Indice B-Tree: Un albero multilivello bilanciato i cui nodi foglia collegati supportano l'accesso casuale e sequenziale.
  • ๏ธ Scambio: Gli indici velocizzano le operazioni di lettura, ma rallentano le operazioni di inserimento, aggiornamento ed eliminazione, oltre a consumare spazio aggiuntivo.

Indicizzazione nel database

Cos'รจ l'indicizzazione?

Indicizzazione รจ una tecnica di struttura dati che consente di recuperare rapidamente i record da un file di database. Un indice รจ una piccola tabella con solo due colonne. La prima colonna contiene una copia della chiave primaria o candidata di una tabella. La sua seconda colonna contiene un insieme di puntatori contiene l'indirizzo del blocco del disco in cui รจ memorizzato quello specifico valore della chiave.

Un indice:

  • Accetta come input una chiave di ricerca.
  • Restituisce in modo efficiente una raccolta di record corrispondenti.

Senza un indice, il database deve scansionare ogni riga per rispondere a una query. Con un indice, invece, passa direttamente al blocco corrispondente, ed รจ per questo che il tipo di indice scelto ha un impatto significativo sulle prestazioni.

Tipi di indicizzazione nei DBMS

Tipo di indici nel database
Tipo di indici nel database

L'indicizzazione in un database รจ definita in base ai suoi attributi di indicizzazione. I due principali tipi di metodi di indicizzazione sono:

  • Indicizzazione primaria
  • Indicizzazione secondaria

Indice primario nel DBMS

Un indice primario รจ un file ordinato di lunghezza fissa con due campi. Il primo campo corrisponde alla chiave primaria, mentre il secondo punta a quello specifico blocco di dati. Nell'indice primario, esiste sempre una corrispondenza uno a uno tra le voci della tabella indice.

L'indice primario รจ ulteriormente suddiviso in due tipologie:

  • Indice denso
  • Indice sparse

Indice denso

In un indice denso, viene creato un record per ogni valore della chiave di ricerca nel database. Questo consente ricerche piรน veloci, ma richiede piรน spazio per memorizzare i record dell'indice. In questo metodo, i record contengono il valore della chiave di ricerca e puntano al record effettivo sul disco.

Indice denso nei DBMS

Indice sparse

Un indice sparso รจ un record di indice che appare solo per alcuni dei valori nel file. L'indice sparso aiuta a risolvere i problemi dell'indicizzazione densa in DBMSIn questa tecnica, una serie di colonne di indice memorizzano lo stesso indirizzo del blocco di dati e, quando รจ necessario recuperare i dati, viene recuperato tale indirizzo del blocco.

Un indice sparso memorizza i record dell'indice solo per alcuni valori della chiave di ricerca. Richiede meno spazio e minori costi di manutenzione per inserimenti ed eliminazioni, ma รจ piรน lento di un indice denso nella ricerca dei record.

Di seguito รจ riportato un esempio di indice di database sparso.

Indice sparso nei DBMS

Indice di densitร  vs indice di sparsitร 

Le due principali varianti dell'indice presentano compromessi opposti, riassunti di seguito.

Aspetto Indice denso Indice sparse
Inserimenti Uno per ogni chiave di ricerca Uno per blocco
lo spazio altro Less
Velocitร  di ricerca Faster Piรน lentamente
Manutenzione Piรน elevato Abbassare

Indice secondario nel DBMS

L'indice secondario in un DBMS puรฒ essere generato da un campo che ha un valore univoco per ogni record e dovrebbe essere una chiave candidata. รˆ anche noto come indice non clusterizzato.

Questa tecnica di indicizzazione del database a due livelli viene utilizzata per ridurre la mappaping dimensione del primo livello. Per il primo livello viene selezionata una vasta gamma di numeri, quindi la mappaping le dimensioni rimangono sempre piccole.

Esempio di indice secondario

Comprendiamo l'indicizzazione secondaria con un esempio di indice di database. In un database di conti bancari, i dati vengono memorizzati in sequenza in base al numero di conto (acc_no), ma potresti voler trovare tutti i conti di una specifica filiale della banca ABC.

Qui รจ possibile avere un indice secondario per ogni chiave di ricerca. Il record dell'indice punta a un bucket che contiene puntatori a tutti i record con quello specifico valore di chiave di ricerca.

Indice secondario nel DBMS

ClusterIndice nel DBMS

In un indice cluster, nell'indice vengono memorizzati i record stessi, non i puntatori. Talvolta l'indice viene creato su colonne non chiave primaria, che potrebbero non essere univoche per ogni record. In tal caso, รจ possibile raggruppare due o piรน colonne per ottenere valori univoci e creare un indice, chiamato indice cluster. Questo permette anche di identificare il record piรน rapidamente.

Esempio: Supponiamo che un'azienda abbia assunto molti dipendenti in diversi reparti. In questo caso, รจ necessario creare un indice di clustering per tutti i dipendenti appartenenti allo stesso reparto.

Sono considerati come un unico cluster e l'indice punta al cluster nel suo complesso. In questo caso, Department_no รจ una chiave non univoca.

Che cos'รจ un indice multilivello?

L'indicizzazione multilivello viene creata quando un indice primario non puรฒ essere contenuto in memoria. Con questo tipo di metodo di indicizzazione, รจ possibile ridurre il numero di accessi al disco per raggiungere qualsiasi record. I record vengono memorizzati su disco come un file sequenziale e su tale file viene creato un indice sparso.

Indice multilivello nel DBMS

Indice B-Tree

L'indice B-tree รจ la struttura dati piรน utilizzata per l'indicizzazione basata su alberi nei DBMS. รˆ un formato multilivello di indicizzazione basata su alberi che utilizza un indice bilanciato. alberi di ricerca binariTutti i nodi foglia dell'albero B contengono i puntatori ai dati effettivi.

Inoltre, tutti i nodi foglia sono interconnessi tramite una lista concatenata, il che consente a un albero B di supportare sia l'accesso casuale che quello sequenziale.

Indice B-tree nei DBMS

  • I nodi foglia devono avere da 2 a 4 valori.
  • Ogni percorso dalla radice a una foglia ha, nella maggior parte dei casi, la stessa lunghezza.
  • I nodi non foglia, a parte il nodo radice, hanno da 3 a 5 nodi figli.
  • Ogni nodo che non รจ una radice o una foglia ha tra n/2 e n figli.

Dove predominano le ricerche a corrispondenza esatta e le scansioni di intervallo sono rare, hashing puรฒ rappresentare un'alternativa piรน veloce a un indice B-tree.

Vantaggi dell'indicizzazione

I principali vantaggi dell'indicizzazione sono:

  • Contribuisce a ridurre il numero totale di operazioni di I/O necessarie per recuperare i dati, evitando cosรฌ di dover accedere direttamente a una riga della tabella.
  • Offre agli utenti una ricerca e un recupero dei dati piรน rapidi.
  • Puรฒ ridurre lo spazio occupato dalla tabella, perchรฉ non รจ necessario memorizzare il ROWID nell'indice per ogni riga collegata.
  • I dati nei nodi foglia sono giร  ordinati in base al valore della chiave.

Svantaggi dell'indicizzazione

I principali svantaggi dell'indicizzazione sono:

  • Per eseguire l'indicizzazione, รจ necessaria una chiave primaria sulla tabella con un valore univoco.
  • Non รจ possibile creare un altro indice su dati giร  organizzati nello stesso modo.
  • Non รจ consentito partizionare una tabella organizzata per indice.
  • L'indicizzazione riduce le prestazioni delle query INSERT, DELETE e UPDATE.

DOMANDE FREQUENTI

Un indice primario viene creato sul campo in base al quale il file รจ ordinato, solitamente la chiave primaria. Un indice secondario viene creato su un campo diverso, quindi necessita di bucket per raggiungere ogni record corrispondente.

Un albero B rimane bilanciato, quindi ogni ricerca richiede un numero ridotto e simile di letture del disco, e le sue foglie collegate supportano le scansioni di intervallo. Questo lo rende robusto sia per le query puntuali che per quelle di intervallo.

Ogni operazione di inserimento, aggiornamento ed eliminazione deve anche mantenere attivo ciascun indice. Un maggior numero di indici velocizza le operazioni di lettura, ma aumenta il sovraccarico di scrittura e lo spazio di archiviazione, quindi dovrebbero essere creati solo laddove le query ne traggano effettivamente beneficio.

I sistemi di consulenza basati sull'intelligenza artificiale analizzano il carico di lavoro delle query e raccomandano gli indici che ridurrebbero maggiormente i costi, segnalando al contempo gli indici esistenti che non vengono mai utilizzati e che non fanno altro che aumentare il sovraccarico.

Un indice cluster memorizza le righe stesse nell'ordine dell'indice, quindi una tabella puรฒ averne solo uno. Un indice non cluster memorizza puntatori alle righe, quindi una tabella puรฒ averne diversi.

Riassumi questo post con: