SQL Server Union vs Union All

Union och Union Alla används för att kombinera två eller flera resultatuppsättningar i SQL. En Union Set-operatör skiljer sig från SQL Joins. Unionen kombinerar två uppsättningar medan SQL Joins kombinerar två eller flera kolumner baserat på ett matchande radvillkor. Denna handledning beskriver skillnaderna mellan Union och Union All baserat på funktion och prestanda.

Union All

1. Union All används för att kombinera två eller flera resultatuppsättningar som en resultatuppsättning.
2. Union All innehåller dubbletter från två eller flera resultatuppsättningar.

Union

1. Unionen används för att kombinera två eller flera resultatuppsättningar som en resultatuppsättning.
2. Unionen tar bort dubbletter från två eller flera resultatuppsättningar.
3. Unionen sorterar också resultatuppsättningar i stigande ordning.

Exempel: Union vs Union All

SKAPA TABELL dbo.Batsman (PK_Batman_Id INT, Namn VARCHAR (255)); CREATE TABLE dbo.Bowler (PK_Bowler_Id INT, Namn VARCHAR (255)); Infoga i dbo.Batsman VALUES (1, 'Sachin Tendulkar'); Infoga i dbo.Batsman VALUES (2, 'Rahul Dravid'); Infoga i dbo.Batsman VALUES (3, 'Brian Lara'); Infoga i dbo.Batsman VALUES (4, 'MS Dhoni'); Infoga i dbo.Bowler VALUES (1, 'Sachin Tendulkar'); Infoga i dbo.Bowler VALUES (2, 'Rahul Dravid'); VÄLJ * FRÅN Batsman; Välj * från bowler; 

Union All Set Operation

VÄLJ Namn som spelare FRÅN dbo.Batsman UNION ALL SELECT Namn som spelare FROM dbo.Bowler; 
Resultat Spelare ------------------- Sachin Tendulkar Rahul Dravid Brian Lara MS Dhoni Sachin Tendulkar Rahul Dravid (6 rader påverkas) 

Förfrågan ovan kombinerar två resultatuppsättningar från dbo.Batsman och dbo.Bowler-tabellerna och visar dubbla namn som visas i båda tabellerna.

Union Set Operation

VÄLJ Namn som spelare FROM dbo.Batsman UNION SELECT Namn som spelare FROM dbo.Bowler; 
Resultat Spelare ------------------- Brian Lara MS Dhoni Rahul Dravid Sachin Tendulkar (4 rader påverkas) 

Förfrågan ovan kombinerar två resultatuppsättningar från dbo.Batsman och dbo.Bowler-tabellerna utan några dubbletter, och resultatet sorteras i stigande ordning.

Prestation: Union vs Union All

Som du ser använder Union All 27% av batchexekveringen och Union använder 73% batch-körning.

I detta fall är Union All snabbare än Union eftersom Union All inte tar bort dubbletter och sorterar resultatuppsättningen medan Union tar bort dubbletter och sorterar resultatuppsättningen (vilket behöver mer tid och en prestationsfrekvens). Den distinkta sorteringsoperatören i exekveringsplanen visar att Union gör sorteringen av ingångssatsen.

Bästa praxis

När vi vet att dubbla poster inte är möjliga i ett eller flera uppsättningar, använder vi Union All over Union är fördelaktigt att undvika en prestationsfrekvens.