Gérer les doublons

Améliorer la performance des requêtes dans SQL Server

Dean Smith

Founder, Atamai Analytics

Requête retournant 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 la performance 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 la performance des requêtes dans SQL Server

GROUP BY au lieu de DISTINCT()

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

GROUP BY au lieu 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
... ...
Améliorer la performance des requêtes dans SQL Server

Y a-t-il une autre façon ?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Améliorer la performance 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 la performance 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 la performance 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 la performance des requêtes dans SQL Server

Et UNION ALL ?

 

  • UNION ALL
    • ajoute des lignes de une ou plusieurs tables et ne supprime pas les doublons

 

  • UNION
    • ajoute des lignes de une ou plusieurs tables et supprime les doublons
Améliorer la performance des requêtes dans SQL Server

DISTINCT() et UNION

  • À utiliser avec prudence
  • Peut effectuer un tri interne pour ordonner et repérer les doublons
  • Peut augmenter le temps d'exécution de la requête
Améliorer la performance des requêtes dans SQL Server

Utiliser DISTINCT()

Avant d'utiliser DISTINCT(), posez-vous la question :

  • 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 ?
    • regrouper avec GROUP BY
Améliorer la performance des requêtes dans SQL Server

Utiliser UNION

Avant d'utiliser UNION, posez-vous la question :

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

Passons à la pratique !

Améliorer la performance des requêtes dans SQL Server

Preparing Video For Download...