Bir veritabanında incelemek istediğim birkaç kopyası var, bu yüzden kopyaları görmek için ne yaptım, bunu yaptım:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Bu şekilde, related_field ile tüm satırları birden çok kez alırım. Bu sorgunun yürütülmesi milisaniye sürer.
Şimdi, yinelenen her incelemek istedim, bu yüzden yukarıdaki sorguda bir related_field ile some_table her satırı SEÇEBİLİR düşündüm, bu yüzden böyle yaptım:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
Bu bir sebepten ötürü aşırı yavaş olduğu ortaya çıkıyor (dakikalar alıyor). Onu yavaşlatmak için tam olarak neler oluyor? related_field dizine eklenir.
Sonunda ilk sorgudan bir görünüm "temp_view" oluşturma (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
ve daha sonra bunun gibi ikinci sorgumu yapmaya çalıştı :
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
Ve bu gayet iyi çalışıyor. MySQL bunu birkaç milisaniye içinde yapar.
Burada neler olup bittiğini açıklayan herhangi bir SQL uzmanı var mı?