Combina unione con distinto

3

Situazione: ho bisogno di risultati distinti da due tabelle, entrambe con duplicati. Vorrei sapere se dovrei combinare UNION e DISTINCT.

Esempio 1 : utilizza solo distinti

SELECT DistinctValue
FROM Table1
UNION
SELECT DistinctValue
FROM Table2

Esempio 2 - Combina distinti e unione

SELECT DISTINCT DistinctValue
FROM Table1
UNION
SELECT DISTINCT DistinctValue
FROM Table2

I risultati sono gli stessi, ma ci sono differenze di prestazioni?

    
posta annemartijn 01.10.2014 - 10:37
fonte

2 risposte

3

La risposta dipende dalle statistiche / ottimizzatore ecc. La prima query ti chiede logicamente di prendere i due set di risultati e unirli (che rimuove implicitamente i duplicati di riferimento ). Il secondo dice di prendere ogni set di risultati e rimuovere i duplicati, quindi unirli.

Nel caso dei dati casuali mi aspetterei migliori prestazioni dal primo. Ma se i tuoi dati sono opportunamente distorti, il secondo potrebbe essere migliore. Ad esempio se Table1 avesse milioni di risultati e nessun duplicato e Table2 avesse milioni di risultati ma distinto lo riducesse a pochi record, allora il successivo potrebbe funzionare meglio poiché non poteva confrontare le voci Table2 con le voci Table1 prima di sbarazzarsi di loro.

L'ho eseguito su alcuni dati che avevo messo in giro e che producevano lo stesso piano di query per entrambi in SQL Server. Davvero hai bisogno di profilarlo con i tuoi dati.

    
risposta data 01.10.2014 - 14:49
fonte
2

L'UNIONE in sé e per sé produrrà risultati DISTINCT.

UNION ALL è più veloce di UNION, ma non rimuove i duplicati.

L'inclusione di DISTINCT in una query UNION non aggiunge nulla.

    
risposta data 11.11.2014 - 09:39
fonte

Leggi altre domande sui tag