Gestionarea duplicatelor

Îmbunătățirea performanței interogărilor în SQL Server

Dean Smith

Founder, Atamai Analytics

Interogare cu duplicate

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Îmbunătățirea performanței interogărilor în SQL Server

Eliminarea duplicatelor cu DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Îmbunătățirea performanței interogărilor în SQL Server

GROUP BY în loc de DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Îmbunătățirea performanței interogărilor în SQL Server

GROUP BY în loc de 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
... ...
Îmbunătățirea performanței interogărilor în SQL Server

Există o altă metodă?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Îmbunătățirea performanței interogărilor în SQL Server

Tabelele Fruits

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Îmbunătățirea performanței interogărilor în SQL Server

Fructe duplicate

 

 

 

  • Orange și Strawberry sunt duplicate

Fruits1 adăugat la Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Îmbunătățirea performanței interogărilor în SQL Server

Eliminarea duplicatelor cu 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
Îmbunătățirea performanței interogărilor în SQL Server

Dar UNION ALL?

 

  • UNION ALL
    • adaugă rânduri din unul sau mai multe tabele și _nu_ elimină duplicatele

 

  • UNION
    • adaugă rânduri din unul sau mai multe tabele și elimină duplicatele
Îmbunătățirea performanței interogărilor în SQL Server

DISTINCT() și UNION

  • Utilizați cu precauție
  • Poate folosi un mecanism intern de sortare pentru a verifica duplicatele
  • Poate crește durata de execuție a interogării
Îmbunătățirea performanței interogărilor în SQL Server

Utilizarea DISTINCT()

Înainte de a utiliza DISTINCT(), întrebați-vă:

  • Există o metodă alternativă?
    • utilizarea unui tabel cu cheie unică
  • Interogarea folosește o funcție de agregare?
    • grupați cu GROUP BY
Îmbunătățirea performanței interogărilor în SQL Server

Utilizarea UNION

Înainte de a utiliza UNION, întrebați-vă:

  • Sunt rândurile duplicate acceptabile?
  • Va produce concatenarea interogărilor rânduri duplicate?
  • Luați în considerare UNION ALL dacă duplicatele sunt acceptabile sau nu vor apărea
Îmbunătățirea performanței interogărilor în SQL Server

Să exersăm!

Îmbunătățirea performanței interogărilor în SQL Server

Preparing Video For Download...