Zarządzanie duplikatami

Poprawa wydajności zapytań w SQL Server

Dean Smith

Founder, Atamai Analytics

Zapytanie zwracające duplikaty

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Poprawa wydajności zapytań w SQL Server

Usuwanie duplikatów za pomocą DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Poprawa wydajności zapytań w SQL Server

GROUP BY zamiast DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Poprawa wydajności zapytań w SQL Server

GROUP BY zamiast 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
... ...
Poprawa wydajności zapytań w SQL Server

Czy istnieje inny sposób?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Poprawa wydajności zapytań w SQL Server

Tabele owoców

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Poprawa wydajności zapytań w SQL Server

Zduplikowane owoce

 

 

 

  • Orange i Strawberry są zduplikowane

Fruits1 dołączone do Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Poprawa wydajności zapytań w SQL Server

Usuwanie duplikatów za 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
Poprawa wydajności zapytań w SQL Server

A co z UNION ALL?

 

  • UNION ALL
    • dołącza wiersze z jednej lub więcej tabel i nie usuwa duplikatów

 

  • UNION
    • dołącza wiersze z jednej lub więcej tabel i usuwa duplikaty
Poprawa wydajności zapytań w SQL Server

DISTINCT() i UNION

  • Używać ostrożnie
  • Może korzystać z wewnętrznego mechanizmu sortowania w celu wykrycia duplikatów
  • Może wydłużyć czas wykonywania zapytania
Poprawa wydajności zapytań w SQL Server

Używanie DISTINCT()

Przed użyciem DISTINCT() należy zapytać:

  • Czy istnieje alternatywna metoda?
    • użycie tabeli z unikalnym kluczem
  • Czy zapytanie używa funkcji agregującej?
    • grupowanie za pomocą GROUP BY
Poprawa wydajności zapytań w SQL Server

Używanie UNION

Przed użyciem UNION należy zapytać:

  • Czy zduplikowane wiersze są akceptowalne?
  • Czy łączenie zapytań spowoduje powstanie duplikatów?
  • Rozważyć UNION ALL, jeśli duplikaty są akceptowalne lub gdy nie powstaną
Poprawa wydajności zapytań w SQL Server

Czas na ćwiczenia!

Poprawa wydajności zapytań w SQL Server

Preparing Video For Download...