У меня есть большие (> строки Mil) база данных MySQL, испорченная дубликатами. Я думаю, что это может быть от 1/4 до 1/2 от всего db, заполненного ими. Мне нужно быстро избавиться от них (я имею в виду время выполнения запроса). Вот как это выглядит:
ID (указатель) | text1 | text2 | text3
text1 & text2 комбинация должна быть уникальной, , если есть какие-либо дубликаты, только одна комбинация с текстом3 NOT NULL должна оставаться. Пример:MySQL удаляет дубликаты из большой базы данных быстро
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 минут)
Есть ли более быстрый способ сделать это? Пожалуйста, помогите мне решить эту проблему.
Просьба уточнить: а) нумеруется нумеру поле идентификатора? б) какое количество или соотношение дубликатов мы ожидаем? (полезно решить работу на месте или создать новую таблицу). c) какие индексы существуют в текущей таблице. – mjv
a) Перенумерация поля id не требуется b) моя оценка: от 1/4 до 1/2 от db являются дубликатами. C) id является единственным индексом. Я отредактирую вопрос соответствующим образом. – bizzz