Tôi đã có một vài bản sao trong cơ sở dữ liệu mà tôi muốn kiểm tra, vì vậy những gì tôi đã làm để xem đó là bản sao nào, tôi đã làm điều này:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Bằng cách này, tôi sẽ nhận được tất cả các hàng có liên quan xảy ra nhiều lần. Truy vấn này mất một phần nghìn giây để thực thi.
Bây giờ, tôi muốn kiểm tra từng bản sao, vì vậy tôi nghĩ rằng tôi có thể CHỌN từng hàng trong some_table với có liên quan_field trong truy vấn trên, vì vậy tôi đã làm như thế này:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
Điều này hóa ra là cực kỳ chậm vì một số lý do (phải mất vài phút). Chính xác thì chuyện gì đang xảy ra ở đây để làm cho nó chậm lại? có liên quan được lập chỉ mục.
Cuối cùng, tôi đã thử tạo chế độ xem "temp_view" từ truy vấn đầu tiên (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
và sau đó thực hiện truy vấn thứ hai của mình như thế này:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
Và nó hoạt động tốt. MySQL thực hiện điều này trong một vài phần nghìn giây.
Bất kỳ chuyên gia SQL nào ở đây có thể giải thích những gì đang xảy ra?