Tất cả các câu trả lời ở trên đều đúng, đối với trường hợp DISTINCT trên một cột so với GROUP BY trên một cột. Mỗi công cụ db có triển khai và tối ưu hóa riêng của nó và nếu bạn quan tâm đến sự khác biệt rất nhỏ (trong hầu hết các trường hợp) thì bạn phải kiểm tra với máy chủ cụ thể VÀ phiên bản cụ thể! Khi triển khai có thể thay đổi ...
NHƯNG, nếu bạn chọn nhiều cột trong truy vấn, thì DISTINCT cơ bản là khác nhau! Bởi vì trong trường hợp này, nó sẽ so sánh TẤT CẢ các cột của tất cả các hàng, thay vì chỉ một cột.
Vì vậy, nếu bạn có một cái gì đó như:
// This will NOT return unique by [id], but unique by (id,name)
SELECT DISTINCT id, name FROM some_query_with_joins
// This will select unique by [id].
SELECT id, name FROM some_query_with_joins GROUP BY id
Đó là một sai lầm phổ biến khi nghĩ rằng từ khóa DISTINCT phân biệt hàng bằng cột đầu tiên mà bạn chỉ định, nhưng DISTINCT là một từ khóa chung theo cách này.
Vì vậy, mọi người bạn phải cẩn thận để không đưa ra câu trả lời ở trên là chính xác cho mọi trường hợp ... Bạn có thể bị lẫn lộn và nhận được kết quả sai trong khi tất cả những gì bạn muốn là tối ưu hóa!
Nguồn
2013-05-16 10:49:53
Bạn có thể kiểm tra cho chính mình một cách nhanh chóng khi đặt câu hỏi. Đáng ngạc nhiên, gần như không thể xây dựng một kịch bản trong đó DISTINCT vượt trội hơn GROUP BY - điều này gây phiền toái vì rõ ràng đây không phải là mục đích của GROUP BY. Tuy nhiên, GROUP BY có thể tạo ra những kết quả gây nhầm lẫn, mà tôi nghĩ là đủ lý do để tránh nó. – Strawberry
Có một bản sao khác có câu trả lời khác. xem [MySql - Distinct vs Group By] (http://stackoverflow.com/questions/25114506/mysql-distinct-vs-group-by/25114686) <<< nó nói GROUP BY là tốt hơn – kolunar
Vui lòng xem [tại đây] (http://stackoverflow.com/questions/581521/whats-faster-select-distinct-or-group-by-in-mysql/37611287#answer-37611287) nếu bạn muốn đo chênh lệch thời gian giữa DISTINCT và GROUP BY đang chạy truy vấn của bạn. – kolunar