Una delle domande più frequenti è senza dubbio come si può rendere più veloce una query.
Ovviamente è necessario analizzare di volta in volta il singolo caso ma senza dubbio le principali operazioni da fare sono:
- verificare l'explain plan ed assicurarsi che il primo accesso venga effettuato sulla tabella che consente la maggior selettività dei dati ed utilizzando possibilmente un indice. Se così non fosse forzare il piano utilizzando delle hint.
- verificare che le statistiche delle tabelle siano aggiornate.
- verificare sempre dal piano di accesso che il tipo di join scelto da oracle sia il più performante. Se vogliamo mettere in join milioni di dati solitamente è più performante un hash join piuttosto che un nested loop
- verificare se tutte le tabelle che stiamo mettendo in join sono realmente necessarie. Spesso mi è successo di abbattere notevolmente i tempi di esecuzione mettendo delle select puntuali direttamente nella SELECT togliendo le tabelle dalla FROM ed elminando quindi la JOIN. Se si deve verificare solamente una condizione e non servono i campi di una determinata tabella in output può essere utile anche utilizzare EXISTS oppure NOT EXISTS.
Quali sono invece i vostri trucchi del mestiere?