Как удалить дубликаты данных на основе двух столбцов

#mysql

Вопрос:

Я хочу сделать запрос, который удаляет дубликаты данных, оставляя только один дубликат данных, когда два столбца перекрываются. Возможно, из-за большого количества данных, но следующий запрос долгое время не работает

 
DELETE t1 FROM table t1 INNER JOIN table t2 
WHERE t1.idx < t2.idx AND t1.Nm = t2.Nm AND t1.product = t2.product;
 

Может ли этот запрос делать то, что я хочу? Если нет, то каков другой путь?

Комментарии:

1. Вы должны соединять только строки, которые одинаковы, УДАЛИТЕ t1 ИЗ таблицы t1 ВО ВНУТРЕННЕЙ таблице СОЕДИНЕНИЯ t2 (t1.Nm = t2.Nm И t1.product = t2.product) ГДЕ t1.idx;

2. Я попробовал сделать так, как вы мне сказали, но он работает уже более 5 минут. Строка составляет около 30000 строк, но так ли это долго?

Ответ №1:

Создайте индекс для 3 столбцов, участвующих в предложении ON:

 CREATE INDEX idx_name
ON tablename (Nm, product, idx);
 

и выполните запрос следующим образом:

 DELETE t1 FROM tablename t1 INNER JOIN tablename t2 
WHERE t1.Nm = t2.Nm AND t1.product = t2.product AND t1.idx < t2.idx;
 

Как вы можете видеть в этой упрощенной демонстрации, запрос будет выполнен с использованием индекса.