Oracle
 sql >> Database >  >> RDS >> Oracle

Come fai a sapere cos'è un buon indice?

Questo dipende da cosa intendi per "buono" e "cattivo". Fondamentalmente devi renderti conto che ogni indice che aggiungi aumenterà le prestazioni su qualsiasi ricerca di quella colonna (quindi l'aggiunta di un indice alla colonna "cognome" di una tabella persona aumenterà le prestazioni sulle query che contengono "where lastname =") ma ridurre le prestazioni di scrittura nell'intera tabella.

Il motivo è che quando si aggiunge o si aggiorna una riga, è necessario aggiungere o aggiornare sia la tabella stessa che ogni indice di cui è membro quella riga. Quindi, se hai cinque indici su una tabella, ogni aggiunta deve scrivere in sei posizioni - cinque indici e la tabella - e un aggiornamento potrebbe toccare fino a sei posizioni nel peggiore dei casi.

La creazione dell'indice è quindi un atto di bilanciamento tra velocità di query e velocità di scrittura. In alcuni casi, come un datamart che viene caricato con i dati solo una volta alla settimana in un lavoro notturno ma interrogato migliaia di volte al giorno, ha molto senso sovraccaricare con gli indici e accelerare il più possibile le query. Nel caso dei sistemi di elaborazione delle transazioni online, tuttavia, vuoi provare a trovare un equilibrio tra di loro.

Quindi, in breve, aggiungi gli indici alle colonne che sono molto utilizzate nelle query selezionate, ma cerca di evitare di aggiungerne troppi e quindi aggiungi prima le colonne più utilizzate.

Dopodiché è una questione di test di carico per vedere come reagiscono le prestazioni in condizioni di produzione e molte modifiche per trovare un equilibrio accettabile.