Проблема: сотни идентичных (схем) таблиц. Некоторые из них имеют некоторые дублированные данные, которые необходимо удалить. Моя обычная стратегия для этого:mysql: удаление дубликатов при избежании таймаута клиента
walk list of tables - for each do
create temp table with unique key on all fields
insert ignore select * from old table
truncate original table
insert select * back into original table
drop or clean temp table
Для небольших столов это прекрасно работает. К сожалению, таблицы, которые я убираю, часто содержат 100 миллионов миллионов записей, поэтому мои задания и клиентские соединения выходят из строя, пока я выполняю это. (Так как есть сотни этих таблиц, я использую Perl для просмотра списка и очистки каждого из них. Здесь происходит тайм-аут).
Некоторые опции я ищу в:
туздЫшпр - быстрый, но я не вижу, как сделать последующее «вставить игнорировать» шаг
в выходной файл/нагрузка входной_файл - также быстро, но Я запускаюсь с удаленного хоста, а «в outfile» создает все файлы на сервере mysql. Трудно почистить.
выполните вставку/выбор в блоках из 100 тыс. Записей - это позволит избежать тайм-аута db, но его довольно медленно.
Я уверен, что есть лучший способ. Предложения?
[Возможно, это должно помочь.] (Http://stackoverflow.com/questions/2385921/deleting-duplicates-from-a-large-table) – tuxuday
Изначально попробуйте маршрут «alter ignore», но я уверен, что мои связи будет таймаут, прежде чем он закончится. – ethrbunny