Filtrando com WHERE

Melhorando o Desempenho de Consultas no SQL Server

Dean Smith

Founder, Atamai Analytics

Como o WHERE funciona

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabela PlayerStats

Melhorando o Desempenho de Consultas no SQL Server

Como o WHERE funciona

SELECT *
FROM PlayerStats
WHERE Position = 'SG'

Tabela PlayerStats filtrada

Melhorando o Desempenho de Consultas no SQL Server

Ordem de processamento do WHERE

SELECT PlayerName, 
      Team, 
      (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE TotalRebounds >= 1000
ORDER BY TotalRebounds DESC;
  • WHERE é processado antes de SELECT
-- ERROR
Invalid column name 'TotalRebounds'.
Melhorando o Desempenho de Consultas no SQL Server

Usando uma subconsulta

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Início da subconsulta tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- criada na subconsulta
ORDER BY TotalRebounds DESC;
Melhorando o Desempenho de Consultas no SQL Server

Usando uma subconsulta

SELECT PlayerName, 
       Team, 
       TotalRebounds
FROM
     -- Início da subconsulta tr
    (SELECT PlayerName, Team, 
             (DRebound+ORebound) AS TotalRebounds
     FROM PlayerStats) tr
WHERE TotalRebounds >= 1000 -- criada na subconsulta
ORDER BY TotalRebounds DESC;
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Melhorando o Desempenho de Consultas no SQL Server

Cálculos em colunas

SELECT PlayerName, 
       Team, 
       (DRebound+ORebound) AS TotalRebounds
FROM PlayerStats
WHERE (DRebound+ORebound) >= 1000
ORDER BY TotalRebounds DESC;
  • Cálculos em colunas na condição de filtro WHERE podem aumentar o tempo da consulta
PlayerName Team TotalRebounds
Andre Drummond DET 1247
DeAndre Jordan LAC 1171
Karl-Anthony Towns MIN 1012
Dwight Howard CHO 1012
Melhorando o Desempenho de Consultas no SQL Server

Funções em colunas

SELECT PlayerName, College, DraftYear 
FROM Players
WHERE UPPER(LEFT(College,7)) = 'GEORGIA'; 
-- uso desnecessário de funções 
-- em uma coluna de filtragem
  • Aplicar funções a colunas na condição de filtro WHERE pode aumentar o tempo da consulta
PlayerName College DraftYear
Damien Wilkins Georgia
Derrick Favors Georgia Tech 2010
Iman Shumpert Georgia Tech 2011
R.J. Hunter Georgia State 2015
... ... ...
Melhorando o Desempenho de Consultas no SQL Server

WHERE simplificado

SELECT PlayerName, College, DraftYear 
FROM Players 
        -- Sem cálculo ou função
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
... ... ...
Melhorando o Desempenho de Consultas no SQL Server

Resumo

  • WHERE é processado antes de SELECT
  • Cálculos em colunas na condição de filtro WHERE podem aumentar o tempo da consulta
  • Aplicar funções a colunas na condição de filtro WHERE pode aumentar o tempo da consulta
Melhorando o Desempenho de Consultas no SQL Server

Vamos praticar!

Melhorando o Desempenho de Consultas no SQL Server

Preparing Video For Download...