У меня есть большие ( > строки Mil) база данных MySQL, испорченная дубликатами. Я думаю, что это может быть от 1/4 до 1/2 от всего db, заполненного ими.
Мне нужно быстро избавиться от них (я имею в виду время выполнения запроса).
Вот как это выглядит:
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 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 минут)
Есть ли более быстрый способ сделать это? Пожалуйста, помогите мне решить эту проблему.