У меня есть несколько дубликатов в базе данных, которые я хочу проверить, поэтому, что я сделал, чтобы увидеть дубликаты, я сделал это:
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Таким образом, я получаю все строки с соответствующим_поле, которые происходят более одного раза. Этот запрос требует выполнения миллисекунд.
Теперь я хотел проверить каждый из дубликатов, поэтому я подумал, что могу выбрать каждую строку в some_table с соответствующим полем в вышеприведенном запросе, поэтому мне это понравилось:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
)
По какой-то причине это оказывается очень медленным (требуется минут). Что именно здесь происходит, чтобы сделать это медленным? Соответствующее_информация индексируется.
В конце концов я попытался создать представление "temp_view" из первого запроса (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1)
, а затем вместо этого сделав второй запрос следующим образом:
SELECT *
FROM some_table
WHERE relevant_field IN
(
SELECT relevant_field
FROM temp_view
)
И это работает отлично. MySQL делает это за несколько миллисекунд.
Любые эксперты SQL, которые могут объяснить, что происходит?