Správa duplicit

Improving Query Performance in SQL Server

Dean Smith

Founder, Atamai Analytics

Dotaz vracející duplicity

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Improving Query Performance in SQL Server

Odstranění duplicit pomocí DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Improving Query Performance in SQL Server

GROUP BY místo DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Improving Query Performance in SQL Server

GROUP BY místo 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
... ...
Improving Query Performance in SQL Server

Existuje jiný způsob?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Improving Query Performance in SQL Server

Tabulky ovoce

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Improving Query Performance in SQL Server

Duplicitní ovoce

 

 

 

  • Orange a Strawberry jsou duplicitní

Fruits1 připojeno k Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Improving Query Performance in SQL Server

Odstranění duplicit pomocí 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
Improving Query Performance in SQL Server

Co UNION ALL?

 

  • UNION ALL
    • připojí řádky z jedné nebo více tabulek a neodstraní duplicitní řádky

 

  • UNION
    • připojí řádky z jedné nebo více tabulek a odstraní duplicitní řádky
Improving Query Performance in SQL Server

DISTINCT() a UNION

  • Používejte opatrně
  • Může využívat interní řazení ke kontrole duplicit
  • Může prodloužit dobu provádění dotazu
Improving Query Performance in SQL Server

Použití DISTINCT()

Před použitím DISTINCT() je vhodné zvážit:

  • Existuje alternativní metoda?
    • použití tabulky s unikátním klíčem
  • Používá dotaz agregační funkci?
    • seskupení pomocí GROUP BY
Improving Query Performance in SQL Server

Použití UNION

Před použitím UNION je vhodné zvážit:

  • Jsou duplicitní řádky přijatelné?
  • Vzniknou při spojení dotazů duplicitní řádky?
  • Pokud jsou duplicity přijatelné nebo nevzniknou, zvažte UNION ALL
Improving Query Performance in SQL Server

Pojďme si procvičit!

Improving Query Performance in SQL Server

Preparing Video For Download...