Ottimizzazione delle query (prima parte)

Vediamo come scrivere query che non siano solo corrette sintatticamente ma anche performanti.

Terminata l’introduzione al linguaggio sql dovremmo essere in grado di scrivere istruzioni select per estrarre i dati memorizzati in una o piu’ tabelle.

Questo pero’ non e’ sufficiente, in quanto una query, anche se e’ scritta correttamente, potrebbe impiegare un tempo non accettabile per estrarre i dati; diventando quindi praticamente inutilizzabile.

I risultati migliori per velocizzare una query si ottengono utilizzando gli indici.

Un indice e’ composto da uno o piu’ campi di una tabella. Se e’ unico (o primario) identifica ogni record in modo univoco altrimenti viene detto secondario (o non unico).

L’indice permette di recuperare un record direttamente accedendo direttamente alla zona di disco in cui e’ memorizzato il dato, senza scorrere l’intera tabella. Esattamente come accade quando si consulta l’indice di un libro alla ricerca di un determinato argomento.

Ma quali sono i campi di una tabella che devono essere inclusi in un indice allo scopo di velocizzare le query ?

I campi piu’ indicati sono quelli che sono usati di frequente nelle ricerche, nelle join con altre tabelle o utilizzati negli ordinamenti.

Attenzione che gli indici hanno anche un peso, infatti la loro presenza incide negativamente quando si tratta di inserire un nuovo record o di modificarne uno esistente, in quanto devono essere aggiornati ogni volta. Quindi se la tabella viene spesso aggiornata conviene limitare il numero di indici, al contrario se e’ una tavola che viene interrogata molto spesso, l’aggiunta di uno o piu’ indici potrebbe migliorare notevolmente le performance.

Un indice puo’ essere composto da uno o piu’ campi, scelti in base al tipo di query, di join o ordinamento che viene effettuato sulla tavola. Ad esempio una tabella che contiene i numeri di telefono degli utenti di una citta’ verra’ certamente interrogata per cognome,nome e quindi e’ d’obbligo definire un indice su questi due campi. Inoltre si trattera’ quasi certamente di una tavola che viene spesso interrogata ma raramente modificata (o comunque e’ certamente piu’ importante migliorare le performance delle interrogazioni piuttosto che degli inserimenti), motivo in piu’ per definire almeno un indice.

Attenzione che un indice definito su piu’ campi viene utilizzato solo se il campo definito per primo e’ indicato nella where; quindi nel caso della tabella precedente, un’interrogazione solo sul nome non usufruirebbe dell’indice definito su cognome e nome.

La maggior parte dei database definisce automaticamente alcuni indici, ad esempio uno definito sui campi che compongono la primary key. Questo per velocizzare le query e le join ma anche per garantire l’unicita’ della chiave (i valori degli indici sono ordinati e quindi risulta piu’ facile verificare se un valore esiste gia’).

Con queste semplici nozioni e’ possibile iniziare a migliorare le prestazioni delle nostre interrogazioni, nei prossimi interventi vedremo altri concetti in modo piu’ approfondito, analizzando piu’ nel dettaglio come i diversi database gestiscono e sfruttano gli indici.

Peeplo Search

Vuoi inserire la Search di Peeplo sul tuo sito ?

Provala subito!

Le categorie della guida