La risposta di Mason Wheeler è molto buona. Ci sono alcuni altri punti da aggiungere:
Quando il motore di database esegue per primo una query, non viene solo con un piano di esecuzione. Ne vengono fuori molti. Escludendo bug, tutti questi piani di esecuzione sono logicamente equivalenti: vale a dire, genereranno tutti i risultati corretti per la query.
Tuttavia, ciò che li rende diversi è quanto tempo ci vorrà per eseguire il piano. Semplificando un po ', dirò "quanti accessi al disco" invece di "quanto tempo". Questo non è assolutamente vero, ma è vicino. Associato a ciascun piano di esecuzione è un costo stimato. Quello con il costo stimato più basso è quello che viene usato.
Ora, la tua domanda originale può essere riformulata come può fare un dba o un programmatore per fare in modo che Query Optimizer trovi un piano migliore e selezionarlo? La risposta è sì ... ma.
Prima di tutto, la progettazione dell'indice è fondamentale per i piani di esecuzione. Molto spesso, la presenza dell'indice corretto può comportare il rilevamento di query ottimizzatore e il prelievo di una strategia fino a cento volte più veloce. Ma devi stare attento. L'aggiunta di un indice rallenterà alcune altre operazioni del database e dovrai fare attenzione a non arrecare più danni che benefici.
Una seconda cosa che si può fare è analizzare frequentemente le tabelle. Questo è diverso per i diversi prodotti DBMS, ma generalmente l'analisi delle tabelle memorizza i dati sulla tabella che aiutano l'ottimizzatore a effettuare stime dei costi migliori.
Una terza cosa che si può fare è riscrivere le query per essere più logiche e dirette. A volte, i programmatori esperti imparano come scrivere SQL che legge come un linguaggio imperativo negativo invece di un buon linguaggio dichiarativo. Generalmente si tratta di non fidarsi dell'ottimizzatore per svolgere il proprio lavoro. A volte, un umano può superare in astuzia l'ottimizzatore. Più spesso ottieni risultati migliori semplicemente ottimizzando l'ottimizzazione.
Una quarta cosa che si può fare è fornire ciò che si chiamava "suggerimenti" in Oracle con la query. Non conosco la parola equivalente con altri prodotti. Non l'ho visto fare per 15 anni, ma suppongo che sia ancora possibile. Circa 20 anni fa, questa era quasi una necessità per fare le cose. Il mondo è cambiato molto da allora.
Il lungo e breve è che l'ottimizzatore è tuo amico, anche se imperfetto. Lascia che l'ottimizzatore ti aiuti.