Фільтрування за допомогою WHERE

Покращення продуктивності запитів у SQL Server

Dean Smith

Founder, Atamai Analytics

Як працює WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Таблиця PlayerStats

Покращення продуктивності запитів у SQL Server

Як працює WHERE

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Відфільтрована таблиця PlayerStats

Покращення продуктивності запитів у SQL Server

Порядок обробки WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE обробляється перед SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Покращення продуктивності запитів у SQL Server

Використання підзапиту

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;
Покращення продуктивності запитів у SQL Server

Використання підзапиту

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
Покращення продуктивності запитів у SQL Server

Обчислення у стовпцях

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Обчислення у стовпцях у фільтрі WHERE можуть збільшити час виконання запиту
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Покращення продуктивності запитів у SQL Server

Функції над стовпцями

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- unnecessary use of functions 
-- on a filtering column
  • Застосування функцій до стовпців у фільтрі WHERE може збільшити час виконання запиту
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Покращення продуктивності запитів у SQL Server

Спрощення 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
... ... ...
Покращення продуктивності запитів у SQL Server

Підсумок

  • WHERE обробляється перед SELECT
  • Обчислення у стовпцях у фільтрі WHERE можуть збільшити час виконання запиту
  • Застосування функцій до стовпців у фільтрі WHERE може збільшити час виконання запиту
Покращення продуктивності запитів у SQL Server

Давайте потренуємось!

Покращення продуктивності запитів у SQL Server

Preparing Video For Download...