Quản lý bản ghi trùng lặp

Cải thiện hiệu năng truy vấn trong SQL Server

Dean Smith

Founder, Atamai Analytics

Truy vấn trả về bản ghi trùng

SELECT PlayerName,
       Team
FROM PlayerStats; 
PlayerName Team
... ...
Emmanuel Mudiay DEN
Emmanuel Mudiay NYK
Enes Kanter NYK
Eric Bledsoe PHO
Eric Bledsoe MIL
... ...
Cải thiện hiệu năng truy vấn trong SQL Server

Xóa trùng với DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Cải thiện hiệu năng truy vấn trong SQL Server

GROUP BY thay cho DISTINCT()

SELECT DISTINCT(PlayerName)
FROM PlayerStats;
SELECT PlayerName
FROM PlayerStats 
GROUP BY PlayerName;
Cải thiện hiệu năng truy vấn trong SQL Server

GROUP BY thay cho 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
... ...
Cải thiện hiệu năng truy vấn trong SQL Server

Có cách khác không?

SELECT PlayerName
FROM Players;
PlayerName
...
Emmanuel Mudiay
Enes Kanter
Eric Bledsoe
Eric Gordon
Eric Moreland
...
Cải thiện hiệu năng truy vấn trong SQL Server

Bảng Fruits

Fruits1

FruitName FruitType
Grapefruit Citrus
Orange Citrus
Peach Stone
Strawberry Berry

Fruits2

FruitName FruitType
Marionberry Berry
Orange Citrus
Plum Stone
Strawberry Berry
Cải thiện hiệu năng truy vấn trong SQL Server

Trái cây trùng lặp

 

 

 

  • OrangeStrawberry bị trùng lặp

Nối Fruits1 vào Fruits2

FruitName FruitType
... ...
Orange Citrus
Orange Citrus
Plum Stone
Strawberry Berry
Strawberry Berry
Cải thiện hiệu năng truy vấn trong SQL Server

Xóa trùng với 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
Cải thiện hiệu năng truy vấn trong SQL Server

Còn UNION ALL thì sao?

 

  • UNION ALL
    • nối các hàng từ một hoặc nhiều bảng và không xóa trùng lặp

 

  • UNION
    • nối các hàng từ một hoặc nhiều bảng và xóa trùng lặp
Cải thiện hiệu năng truy vấn trong SQL Server

DISTINCT() và UNION

  • Dùng thận trọng
  • Có thể sắp xếp nội bộ để kiểm tra trùng lặp
  • Có thể làm truy vấn chạy lâu hơn
Cải thiện hiệu năng truy vấn trong SQL Server

Dùng DISTINCT()

Trước khi dùng DISTINCT() hãy hỏi:

  • Có cách khác không?
    • dùng bảng có khóa duy nhất
  • Truy vấn có dùng hàm tổng hợp không?
    • nhóm với GROUP BY
Cải thiện hiệu năng truy vấn trong SQL Server

Dùng UNION

Trước khi dùng UNION hãy hỏi:

  • Có chấp nhận hàng trùng không?
  • Việc nối truy vấn có tạo trùng không?
  • Nếu chấp nhận trùng hoặc sẽ không tạo trùng, hãy cân nhắc UNION ALL
Cải thiện hiệu năng truy vấn trong SQL Server

Ayo berlatih!

Cải thiện hiệu năng truy vấn trong SQL Server

Preparing Video For Download...