Utilizzo degli indici relazionali per migliorare le prestazioni

Gli indici possono essere utilizzati per migliorare le prestazioni quando si accede ai dati della tabella. Gli indici relazionali vengono utilizzati quando si accede ai dati relazionali e gli indici sui dati XML vengono utilizzati quando si accede a dati XML.

Sebbene l'ottimizzatore della query decida se utilizzare un indice relazionale per accedere ai dati della tabella relazionale, spetta all'utente decidere quali indici possono migliorare le prestazioni e creare tali indici. Le uniche eccezioni a ciò sono gli indici di blocco delle dimensioni e l'indice di blocco composito che vengono creati automaticamente per ogni dimensione quando si crea una tabella MDC (multidimensional clustering).

Eseguire il programma di utilità runstats per raccogliere nuove statistiche di indice dopo aver creato un indice relazionale o dopo aver modificato la dimensione di precaricamento. È necessario eseguire il programma di utilità runstats a intervalli regolari per mantenere aggiornate le statistiche; senza statistiche aggiornate sugli indici, l'ottimizzatore non può determinare il miglior piano di accesso ai dati per le query.

Per determinare se un indice relazionale viene utilizzato in un package specifico, utilizzare la funzione explain. Per ottenere suggerimenti sugli indici relazionali che potrebbero essere sfruttati da una o più istruzioni SQL, utilizzare il comando db2advis per avviare l'Advisor di progettazione.

IBM® Data Server Manager fornisce strumenti per migliorare le prestazioni di singole istruzioni SQL e le prestazioni di gruppi di istruzioni SQL, denominati carichi di lavoro di query. Per ulteriori informazioni su questo prodotto, consultare Ottimizzazione.

Vantaggi di un indice relazionale rispetto a nessun indice

Se non esiste alcun indice su una tabella, è necessario eseguire una scansione tabella per ogni tabella a cui si fa riferimento in una query SQL. Maggiore è la dimensione della tabella, maggiore sarà il tempo di una scansione di questo tipo, poiché una scansione di tabella richiede l'accesso sequenziale a ciascuna riga. Anche se una scansione della tabella potrebbe essere più efficiente per una query complessa che richiede la maggior parte delle righe in una tabella, una scansione dell'indice può accedere alle righe della tabella in modo più efficace per una query che restituisce solo alcune righe della tabella.

L'ottimizzatore sceglie una scansione dell'indice se si fa riferimento alle colonne dell'indice relazionale nell'istruzione SELECT e se l'ottimizzatore stima che una scansione dell'indice sarà più veloce di una scansione della tabella. I file di indice sono generalmente più piccoli e richiedono meno tempo per la lettura rispetto a un'intera tabella, soprattutto quando la tabella è di grandi dimensioni. Inoltre, potrebbe non essere necessario eseguire la scansione di un intero indice. Qualsiasi predicato applicato all'indice ridurrà il numero di righe che devono essere lette dalle pagine di dati.

Se un requisito di ordinamento sull'output può essere associato a una colonna dell'indice, la scansione dell'indice nell'ordine della colonna consentirà il richiamo delle righe nell'ordine corretto senza la necessità di un'operazione di ordinamento. Notare che l'esistenza di un indice relazionale sulla tabella sottoposta a query non garantisce una serie di risultati ordinata. Solo una clausola ORDER BY garantisce l'ordine di una serie di risultati.

Un indice relazionale può contenere anche colonne di inclusione, che sono colonne non indicizzate in una riga indicizzata. Tali colonne possono consentire all'ottimizzatore di richiamare le informazioni richieste dall'indice da solo, senza dover accedere alla tabella stessa.

Svantaggi di un indice relazionale rispetto a nessun indice

Sebbene gli indici possano ridurre in modo significativo il tempo di accesso, possono anche avere effetti negativi sulle prestazioni. Prima di creare gli indici, considerare gli effetti di più indici sullo spazio su disco e sul tempo di elaborazione. Scegliere gli indici con attenzione per soddisfare i bisogni dei programmi applicativi.
  • Ogni indice richiede spazio di memoria. La quantità esatta dipende dalla dimensione della tabella e dalla dimensione e dal numero di colonne nell'indice relazionale.
  • Ogni operazione di inserimento o eliminazione su una tabella richiede un ulteriore aggiornamento di ciascun indice su tale tabella. Ciò è vero anche per ogni operazione di aggiornamento che modifica il valore di una chiave di indice.
  • Ciascun indice relazionale rappresenta un altro piano di accesso potenziale da considerare per l'ottimizzatore, che aumenta il tempo di compilazione della query.