Gerenciando duplicatas

Melhorando o Desempenho de Consultas no SQL Server

Dean Smith

Founder, Atamai Analytics

Consulta retornando duplicatas

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Melhorando o Desempenho de Consultas no SQL Server

Removendo duplicatas com DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Melhorando o Desempenho de Consultas no SQL Server

GROUP BY em vez de DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Melhorando o Desempenho de Consultas no SQL Server

GROUP BY em vez de DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
SELECT PlayerName,
    COUNT(Team) AS TeamsPlayedFor
FROM PlayerStats 
GROUP BY PlayerName;
PlayerName TeamsPlayedFor
... ...
Emmanuel Mudiay 2
Enes Kanter 1
Eric Bledsoe 2
Eric Gordon 1
Eric Moreland 1
... ...
Melhorando o Desempenho de Consultas no SQL Server

Existe outra forma?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Melhorando o Desempenho de Consultas no SQL Server

Tabelas de frutas

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Melhorando o Desempenho de Consultas no SQL Server

Frutas duplicadas

 

 

 

  • Orange e Strawberry estão duplicadas

Fruits1 anexada a Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Melhorando o Desempenho de Consultas no SQL Server

Remover duplicatas com UNION

SELECT FruitName, FruitType
FROM Fruits1

UNION

SELECT FruitName, FruitType
FROM Fruits2
FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry
Marionberry Berry
Plum Stone
Melhorando o Desempenho de Consultas no SQL Server

E o UNION ALL?

 

  • UNION ALL
    • concatena linhas de uma ou mais tabelas e não remove duplicatas

 

  • UNION
    • concatena linhas de uma ou mais tabelas e remove duplicatas
Melhorando o Desempenho de Consultas no SQL Server

DISTINCT() e UNION

  • Use com cautela
  • Pode usar ordenação interna para verificar duplicatas
  • Pode aumentar o tempo de execução da consulta
Melhorando o Desempenho de Consultas no SQL Server

Usando DISTINCT()

Antes de usar DISTINCT(), pergunte:

  • Existe outro método?
    • usar uma tabela com chave única
  • A consulta usa função de agregação?
    • agrupe com GROUP BY
Melhorando o Desempenho de Consultas no SQL Server

Usando UNION

Antes de usar UNION, pergunte:

  • Linhas duplicadas são aceitáveis?
  • As consultas anexadas vão gerar duplicatas?
  • Considere UNION ALL se duplicatas forem OK ou se não serão criadas duplicatas
Melhorando o Desempenho de Consultas no SQL Server

Vamos praticar!

Melhorando o Desempenho de Consultas no SQL Server

Preparing Video For Download...