Добрый день, не могу понять, почему запрос долго выполняется,
имеется таблица в 10 000 записей, следующего вида
id ; computer_name ; hash
1 ; a ; 11
2 ; b ; 22
3 ; b ; 22
4 ; c ; 33
5 ; c ; 34
Задача такая, что из таблицы нужно удалить дубликатные данные, причём дубликаты нужно определять по полям computer_name и хэш вместе
т.е. из примера выше дубликатом являются строки 2 и 3 т.к. у них одинаковые значения обоих полей (computer_name и hash)
а строки 4 и 5 не являются дубликатом, т.к. их hash разный
Причём после удаления нужно оставить только тут строку из группы дубликатов, чей ID максимальный, другими словами в результате нужно получить
1 ; a ; 11
3 ; b ; 22
4 ; c ; 33
5 ; c ; 34
Написал такой запрос:
DELETE FROM table
WHERE id NOT IN (SELECT MAX(id)
FROM table
GROUP BY computer_name, hash);
И проблема в том, что на моём примере, таблица содержит 10 000 записей, при это пока дубликатов нет, т.е. все строки уникальны, так вот запрос выполняется 3 минуты, и в результате говорит что ничего не удалено, и это правильно, т.к. нет дубликатов, проблема в том, почем он 3 минуты выполняется :///
Если я делаю запрос
SELECT * FROM table
WHERE id NOT IN (SELECT MAX(id)
FROM table
GROUP BY computer_name, hash);
то моментально выполняется :/ Поле id - первичный ключ соответственно с индексом