Mentre stai cercando informazioni specifiche su Oracle, consiglierei il blog Ask Tom su Oracle. In generale, penso che troverai il consiglio di non mettere a punto la query. Riceverai buoni consigli su come scrivere una query che l'ottimizzatore può ottimizzare. Anche la documentazione di Oracle è online e di solito cerco informazioni aggiornate su Oracle. Non ho lavorato con SQL Server, quindi non ho alcun consiglio per questo.
Non ho visto molte novità nel campo dell'ottimizzazione delle query negli ultimi anni. Il grande cambiamento è la deprecazione dell'ottimizzatore basato su regole, con cui riesco a malapena a ricordare di aver lavorato. Tuttavia, capisco che SQL Server utilizza ancora un ottimizzatore basato su regole, quindi comprendere le sue regole può aiutare.
Uno strumento in cui è possibile modificare una query, eseguirla e generare un piano di spiegazione aiuta a comprendere quali cambiamenti consentono di ottenere una query che funziona correttamente. Ho ottenuto buoni risultati con AquaData Studio e mi piace molto la sua vista ad albero. Anche lo sviluppatore SQL dovrebbe fare altrettanto.
Come per qualsiasi ottimizzazione, è necessario disporre di dati quantitativi sulle prestazioni. Quindi puoi determinare se l'hai effettivamente ottimizzato.
Come ottimizzare una query dipende in parte da come il parser costruisce e ottimizza la query. In larga misura dipende dalla distribuzione dei dati di cui si sta eseguendo la query. In un database Oracle se il set di risultati costituisce il quattro percento o più di una tabella e sono distribuiti in modo casuale, una scansione della tabella è in genere più veloce di un indice.
Ho lavorato per ottimizzare le query per un team di sviluppatori. Solo due o tre query all'anno richiedevano una seria ottimizzazione. Molte query sono abbastanza semplici da non necessitare di ottimizzazione. Di solito, il resto può essere gestito aggiungendo percorsi di join mancanti.
Per Oracle ci sono tre impostazioni regolabili che possono influire in modo significativo sulle prestazioni. I costi per le ricerche di indici e dati interagiscono per modificare le condizioni in base alle quali un indice in verrà o non verrà utilizzato. Questi due possono essere regolati in base alla sessione. Le impostazioni predefinite spesso non sono ottimali. L'altro valore controlla quante alternative proverà l'ottimizzatore. Aumentare questo valore spesso aiuta.
L'ottimizzazione è influenzata in modo significativo dalla distribuzione e dal volume dei dati. Quando lo si ottimizza, è meglio utilizzare una copia del database di produzione, o almeno un database con la stessa distribuzione e volumi di dati. Ho gravemente danneggiato l'ambiente di test, ottimizzando una query per il database degli ordini di produzione. I database di test e sviluppo avevano una distribuzione dei dati significativamente diversa che causava il fallimento della query anche con dati significativamente inferiori.