Filtrer avec WHERE

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

Dean Smith

Founder, Atamai Analytics

Fonctionnement de WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Table PlayerStats

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

Fonctionnement de WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Table PlayerStats filtrée

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

Ordre de traitement de WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE est traité avant SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Améliorer la performance des requêtes dans SQL Server

Utiliser une sous-requête

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Début de la sous-requête tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- créé dans la sous-requête
ORDER BY TotalRebounds DESC;
Améliorer la performance des requêtes dans SQL Server

Utiliser une sous-requête

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Début de la sous-requête tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- créé dans la sous-requête
ORDER BY TotalRebounds DESC;
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Améliorer la performance des requêtes dans SQL Server

Calculs sur des colonnes

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Les calculs sur des colonnes dans la condition de filtre WHERE peuvent augmenter le temps de requête
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Améliorer la performance des requêtes dans SQL Server

Fonctions sur des colonnes

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- utilisation inutile de fonctions 
-- sur une colonne filtrée
  • L'application de fonctions à des colonnes dans la condition de filtre WHERE peut augmenter le temps de requête
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Améliorer la performance des requêtes dans SQL Server

WHERE simplifié

SELECT PlayerName, College, DraftYear 
FROM Players 
        -- Aucun calcul ni fonction
WHERE College like 'Georgia%'; 
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Améliorer la performance des requêtes dans SQL Server

En résumé

  • WHERE est traité avant SELECT
  • Les calculs sur des colonnes dans la condition de filtre WHERE peuvent augmenter le temps de requête
  • L'application de fonctions à des colonnes dans la condition de filtre WHERE peut augmenter le temps de requête
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...