2010-09-02 10 views
11

Devo eseguire un'istruzione select su più tabelle. Sono sicuro che le tabelle restituiscono diversi record. Sto comunque usando UNION ALL.prestazioni dell'unione contro unione tutte

È meglio utilizzare UNION o UNION ALL in termini di prestazioni quando sono sicuro che le tabelle restituiscono record diversi?

+0

possibile duplicato del [all'unione o unione tutto, questo è il problema] (http://stackoverflow.com/domande/3909563/a-union-o-union-all-che-è-il-domanda) –

risposta

5

UNION ALL è sempre più veloce, perché l'unione esclude voci duplicate

1

È preferibile utilizzare UNION ALL quando si sa che si desidera tutte le righe di risultati, anche se non si sa che saranno distinte o meno. UNION senza "all" comporterà sempre eseguendo il "controllo distinto", indipendentemente da quale sia effettivamente il dato.

0

Perché UNION ALL è più veloce? Perché UNION deve fare una sorta per rimuovere i duplicati. Se non è necessario rimuovere i duplicati, UNION ALL è l'opzione migliore, tuttavia UNION ha uno scopo e dovrebbe essere utilizzato quando appropriato.

3

UNION implementa internamente due query. 1. SELECT che restituisce un set di dati 2. DISTINCT. Chiunque abbia studiato gli interni del database può facilmente capire che una clausola DISTINCT è estremamente costosa in termini di elaborazione.

Se si è certi che il set di dati risultante non debba contenere righe univoche, è possibile ignorare UNION e utilizzare invece UNION ALL.

UNION ALL sarà uguale a UNION eccezione del fatto che non si attiva un DISTINCT noi risparmiando internamente operazioni costose