Filtrer avec WHERE

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

Dean Smith

Founder, Atamai Analytics

Fonctionnement de WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Table PlayerStats

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

Fonctionnement de WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Table PlayerStats filtrée

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

Utiliser une sous-requête

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Start of sub-query tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- created in the sub-query
ORDER BY TotalRebounds DESC;
Améliorer les performances des requêtes dans SQL Server

Utiliser une sous-requête

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Start of sub-query tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- created in the sub-query
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 les performances 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 rallonger les 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 les performances des requêtes dans SQL Server

Fonctions sur des colonnes

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- unnecessary use of functions 
-- on a filtering column
  • L'application de fonctions à des colonnes dans la condition de filtre WHERE peut rallonger les 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 les performances des requêtes dans SQL Server

WHERE simplifié

SELECT PlayerName, College, DraftYear 
FROM Players 
        -- No calculation or function
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 les performances des requêtes dans SQL Server

Récapitulatif

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