Filtrering med WHERE

Förbättra frågeprestanda i SQL Server

Dean Smith

Founder, Atamai Analytics

Så fungerar WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabellen PlayerStats

Förbättra frågeprestanda i SQL Server

Så fungerar WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Filtrerad PlayerStats-tabell

Förbättra frågeprestanda i SQL Server

WHERE:s bearbetningsordning

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE bearbetas före SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Förbättra frågeprestanda i SQL Server

Använda en underfråga

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;
Förbättra frågeprestanda i SQL Server

Använda en underfråga

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
Förbättra frågeprestanda i SQL Server

Beräkningar på kolumner

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Beräkningar på kolumner i WHERE-filtervillkoret kan öka frågetiden
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Förbättra frågeprestanda i SQL Server

Funktioner på kolumner

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- unnecessary use of functions 
-- on a filtering column
  • Att använda funktioner på kolumner i WHERE-filtervillkoret kan öka frågetiden
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Förbättra frågeprestanda i SQL Server

Förenklad WHERE

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
... ... ...
Förbättra frågeprestanda i SQL Server

Sammanfattning

  • WHERE bearbetas före SELECT
  • Beräkningar på kolumner i WHERE-filtervillkoret kan öka frågetiden
  • Att använda funktioner på kolumner i WHERE-filtervillkoret kan öka frågetiden
Förbättra frågeprestanda i SQL Server

Nu kör vi en övning!

Förbättra frågeprestanda i SQL Server

Preparing Video For Download...