Hantera dubbletter

Förbättra frågeprestanda i SQL Server

Dean Smith

Founder, Atamai Analytics

Fråga som returnerar dubbletter

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Förbättra frågeprestanda i SQL Server

Ta bort dubbletter med DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Förbättra frågeprestanda i SQL Server

GROUP BY i stället för DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Förbättra frågeprestanda i SQL Server

GROUP BY i stället för DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
SELECT PlayerName,
    COUNT(Team) AS TeamsPlayedFor
FROM PlayerStats 
GROUP BY PlayerName;
PlayerName TeamsPlayedFor
... ...
Emmanuel Mudiay 2
Enes Kanter 1
Eric Bledsoe 2
Eric Gordon 1
Eric Moreland 1
... ...
Förbättra frågeprestanda i SQL Server

Finns det ett annat sätt?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Förbättra frågeprestanda i SQL Server

Tabellerna Fruits

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Förbättra frågeprestanda i SQL Server

Dubbla frukter

 

 

 

  • Orange och Strawberry är dubbletter

Fruits1 tillagd efter Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Förbättra frågeprestanda i SQL Server

Ta bort dubbletter med UNION

SELECT FruitName, FruitType
FROM Fruits1

UNION

SELECT FruitName, FruitType
FROM Fruits2
FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry
Marionberry Berry
Plum Stone
Förbättra frågeprestanda i SQL Server

Vad är UNION ALL?

 

  • UNION ALL
    • lägger till rader från en eller flera tabeller och tar inte bort dubbletter

 

  • UNION
    • lägger till rader från en eller flera tabeller och tar bort dubbletter
Förbättra frågeprestanda i SQL Server

DISTINCT() och UNION

  • Använd med försiktighet
  • Kan använda en intern sorteringsmekanism för att ordna och kontrollera dubbletter
  • Kan öka körningstiden för en fråga
Förbättra frågeprestanda i SQL Server

Använda DISTINCT()

Innan du använder DISTINCT() bör du fråga dig:

  • Finns det ett alternativ?
    • använd en tabell med en unik nyckel i stället
  • Använder frågan en aggregatfunktion?
    • gruppera med GROUP BY
Förbättra frågeprestanda i SQL Server

Använda UNION

Innan du använder UNION bör du fråga dig:

  • Är dubbletter acceptabla?
  • Kan sammanslagningen av frågor skapa dubbletter?
  • Överväg UNION ALL om dubbletter är OK eller om inga dubbletter skapas
Förbättra frågeprestanda i SQL Server

Nu kör vi en övning!

Förbättra frågeprestanda i SQL Server

Preparing Video For Download...