Gérer les doublons

Améliorer les performances des requêtes dans SQL Server

Dean Smith

Founder, Atamai Analytics

Requête renvoyant des doublons

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Améliorer les performances des requêtes dans SQL Server

Supprimer les doublons avec DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Améliorer les performances des requêtes dans SQL Server

GROUP BY plutôt que DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Améliorer les performances des requêtes dans SQL Server

GROUP BY plutôt que 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
... ...
Améliorer les performances des requêtes dans SQL Server

Une autre façon ?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Améliorer les performances des requêtes dans SQL Server

Tables de fruits

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Améliorer les performances des requêtes dans SQL Server

Fruits en double

 

 

 

  • Orange et Strawberry sont en double

Fruits1 ajouté à Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Améliorer les performances des requêtes dans SQL Server

Supprimer les doublons avec 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
Améliorer les performances des requêtes dans SQL Server

Et UNION ALL ?

 

  • UNION ALL
    • concatène les lignes de plusieurs tables et ne supprime pas les doublons

 

  • UNION
    • concatène les lignes de plusieurs tables et supprime les doublons
Améliorer les performances des requêtes dans SQL Server

DISTINCT() et UNION

  • À utiliser avec prudence
  • Peut trier en interne pour repérer et supprimer les doublons
  • Peut allonger le temps d'exécution de la requête
Améliorer les performances des requêtes dans SQL Server

Quand utiliser DISTINCT()

Avant d'utiliser DISTINCT(), demandez‑vous :

  • Existe‑t‑il une autre méthode ?
    • utiliser plutôt une table avec une clé unique
  • La requête utilise‑t‑elle une fonction d'agrégation ?
    • grouper avec GROUP BY
Améliorer les performances des requêtes dans SQL Server

Quand utiliser UNION

Avant d'utiliser UNION, demandez‑vous :

  • Les doublons sont‑ils acceptables ?
  • Les requêtes concaténées produiront‑elles des doublons ?
  • Envisagez UNION ALL si les doublons sont acceptables ou s'il n'y en aura pas
Améliorer les performances des requêtes dans SQL Server

Passons à la pratique !

Améliorer les performances des requêtes dans SQL Server

Preparing Video For Download...