管理重複值

改進 SQL Server 中的查詢效能

Dean Smith

Founder, Atamai Analytics

查詢回傳重複列

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
改進 SQL Server 中的查詢效能

用 DISTINCT() 移除重複值

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
改進 SQL Server 中的查詢效能

以 GROUP BY 取代 DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
改進 SQL Server 中的查詢效能

以 GROUP BY 取代 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
... ...
改進 SQL Server 中的查詢效能

還有其他方法嗎?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
改進 SQL Server 中的查詢效能

水果資料表

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
改進 SQL Server 中的查詢效能

重複的水果

 

 

 

  • OrangeStrawberry 為重複項

Fruits1 接到 Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
改進 SQL Server 中的查詢效能

用 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
改進 SQL Server 中的查詢效能

那 UNION ALL 呢?

 

  • UNION ALL
    • 將一個或多個資料表的列接續起來,且不會移除重複列

 

  • UNION
    • 將一個或多個資料表的列接續起來,並會移除重複列
改進 SQL Server 中的查詢效能

DISTINCT() 與 UNION

  • 謹慎使用
  • 可能使用內部排序來比對並檢查重複
  • 可能增加查詢執行時間
改進 SQL Server 中的查詢效能

使用 DISTINCT()

在使用 DISTINCT() 前先思考:

  • 有沒有替代方法?
    • 是否可改用具唯一鍵的資料表
  • 查詢是否使用彙總函式?
    • 可用 GROUP BY 分組
改進 SQL Server 中的查詢效能

使用 UNION

在使用 UNION 前先思考:

  • 允許重複列嗎?
  • 接續查詢會產生重複列嗎?
  • 若允許重複列,或不會產生重複列,可考慮使用 UNION ALL
改進 SQL Server 中的查詢效能

一起來練習吧!

改進 SQL Server 中的查詢效能

Preparing Video For Download...