Filtrare cu WHERE

Îmbunătățirea performanței interogărilor în SQL Server

Dean Smith

Founder, Atamai Analytics

Cum funcționează WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabelul PlayerStats

Îmbunătățirea performanței interogărilor în SQL Server

Cum funcționează WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabelul PlayerStats filtrat

Îmbunătățirea performanței interogărilor în SQL Server

Ordinea de procesare WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE este procesat înaintea SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Îmbunătățirea performanței interogărilor în SQL Server

Utilizarea unui subinterogări

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;
Îmbunătățirea performanței interogărilor în SQL Server

Utilizarea unui subinterogări

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
Îmbunătățirea performanței interogărilor în SQL Server

Calcule pe coloane

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Calculele pe coloane în condiția de filtrare WHERE pot crește timpul de interogare
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Îmbunătățirea performanței interogărilor în SQL Server

Funcții pe coloane

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- unnecessary use of functions 
-- on a filtering column
  • Aplicarea funcțiilor pe coloane în condiția de filtrare WHERE poate crește timpul de interogare
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Îmbunătățirea performanței interogărilor în SQL Server

WHERE simplificat

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
... ... ...
Îmbunătățirea performanței interogărilor în SQL Server

Rezumat

  • WHERE este procesat înaintea SELECT
  • Calculele pe coloane în condiția de filtrare WHERE pot crește timpul de interogare
  • Aplicarea funcțiilor pe coloane în condiția de filtrare WHERE poate crește timpul de interogare
Îmbunătățirea performanței interogărilor în SQL Server

Să exersăm!

Îmbunătățirea performanței interogărilor în SQL Server

Preparing Video For Download...