У меня большая (> миллионов строк) база данных MySQL, испорченная дубликатами. Я думаю, что ими может быть от 1/4 до 1/2 всего дБ. Мне нужно быстро избавиться от них (я имею в виду время выполнения запроса). Вот как это выглядит:
id (index) | text1 | text2 | Комбинация text3
text1 и text2 должна быть уникальной, если есть какие-либо дубликаты, должна остаться только одна комбинация с text3 NOT NULL. Пример:
1 | abc | def | NULL
2 | abc | def | ghi
3 | abc | def | jkl
4 | aaa | bbb | NULL
5 | aaa | bbb | NULL
... становится:
1 | abc | def | ghi #(doesn't realy matter id:2 or id:3 survives)
2 | aaa | bbb | NULL #(if there's no NOT NULL text3, NULL will do)
Новые идентификаторы могут быть чем угодно, они не зависят от идентификаторов старых таблиц.
Я пробовал такие вещи, как:
CREATE TABLE tmp SELECT text1, text2, text3
FROM my_tbl;
GROUP BY text1, text2;
DROP TABLE my_tbl;
ALTER TABLE tmp RENAME TO my_tbl;
Или SELECT DISTINCT и другие варианты.
Хотя они работают с небольшими базами данных, у меня время выполнения запроса просто огромно (на самом деле никогда не доходило до конца;> 20 минут)
Есть ли более быстрый способ сделать это? Пожалуйста, помогите мне решить эту проблему.