Filtrowanie za pomocą WHERE

Poprawa wydajności zapytań w SQL Server

Dean Smith

Founder, Atamai Analytics

Jak działa WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabela PlayerStats

Poprawa wydajności zapytań w SQL Server

Jak działa WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Przefiltrowana tabela PlayerStats

Poprawa wydajności zapytań w SQL Server

Kolejność przetwarzania WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE jest przetwarzane przed SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Poprawa wydajności zapytań w SQL Server

Użycie podzapytania

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;
Poprawa wydajności zapytań w SQL Server

Użycie podzapytania

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
Poprawa wydajności zapytań w SQL Server

Obliczenia na kolumnach

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Obliczenia na kolumnach w warunku filtrowania WHERE mogą wydłużyć czas zapytania
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Poprawa wydajności zapytań w SQL Server

Funkcje na kolumnach

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- unnecessary use of functions 
-- on a filtering column
  • Stosowanie funkcji na kolumnach w warunku filtrowania WHERE może wydłużyć czas zapytania
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Poprawa wydajności zapytań w SQL Server

Uproszczone 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
... ... ...
Poprawa wydajności zapytań w SQL Server

Podsumowanie

  • WHERE jest przetwarzane przed SELECT
  • Obliczenia na kolumnach w warunku filtrowania WHERE mogą wydłużyć czas zapytania
  • Stosowanie funkcji na kolumnach w warunku filtrowania WHERE może wydłużyć czas zapytania
Poprawa wydajności zapytań w SQL Server

Czas na ćwiczenia!

Poprawa wydajności zapytań w SQL Server

Preparing Video For Download...