Le due versioni sono funzionalmente identiche. Bene, il secondo è sintatticamente corretto, ma presumo si intende: (. È necessario l'alias sul calcolo e diversi i principali database richiedono un alias in una subquery in una clausola FROM
)
select *
from (
select team, count(min) as count
from table
group by team
) t
where count > 500
Essere funzionalmente equivalente non corrisponde a significa che sono necessariamente ottimizzati allo stesso modo. Esistono spesso diversi modi per scrivere una query che sono funzionalmente equivalenti. Tuttavia, lo specifico motore di database/ottimizzatore può scegliere (e spesso sceglie) diversi percorsi di ottimizzazione.
In questo caso, la query è così semplice che è difficile pensare a più percorsi di ottimizzazione. Per entrambe le versioni, il motore deve fondamentalmente aggregare la query e quindi testare la seconda colonna per il filtro. Personalmente non vedo molte varianti su questo tema. Qualsiasi motore SQL decente dovrebbe utilizzare gli indici, se necessario, in entrambi i casi o nessuno dei due.
Quindi, la risposta a questa domanda specifica è che in qualsiasi database ragionevole, ciò dovrebbe comportare lo stesso piano di esecuzione (vale a dire, nell'uso di indici, l'utente del parallelismo e la scelta dell'algoritmo di aggregazione). Tuttavia, essere funzionalmente equivalenti non significa che un determinato motore di database produrrà lo stesso piano di esecuzione. Quindi, la risposta generale è "no".
fonte
2012-10-17 22:06:14
Principalmente: sono semanticamente identici? – usr
li hai testati o riesaminato il piano di spiegazioni? – Taryn
Puoi mostrare il piano di esecuzione della query? –