удаление большой таблицы mysql

#mysql #sql #sql-delete #large-data

#mysql #sql #sql-удалить #большие данные

Вопрос:

я использую базу данных mysql версии 5. У меня есть таблица, в которой около 500.000.000 строк.Таблица освобождает 50 ГБ дискового пространства, если я доверяю phpmyadmin. Мне нравится удалять 90% строк, чтобы освободить место на диске.

Каков наилучший вариант?

  • Я могу удалить строки с помощью скрипта и запустить «ОПТИМИЗИРОВАТЬ ТАБЛИЦУ». Таблица будет заблокирована, но я не знаю, сколько времени это может занять? У кого-нибудь есть опыт?

  • Я могу удалить таблицу, создать новую и импортировать 10% вручную. Сколько времени займет удаление таблицы при таком размере?

Спасибо!

Ответ №1:

Поскольку вы хотите удалить большую часть строк в таблице, я бы рекомендовал переместить строки, которые вы хотите сохранить, во временную таблицу, обрезать таблицу, а затем повторно импортировать. Это по-прежнему требует простоя таблицы (то есть не должно быть операций чтения или записи в таблицу во время выполнения операции), но должно быть на порядок быстрее, чем удаление строки за строкой.

 create table tmptable as select * from mytable where ...;
truncate table mytable;
insert into mytable select * from tmptable;
drop table tmptable;
  

Неявно truncate table удаляет и воссоздает таблицу, которая освободит место. В документации есть несколько интересных пунктов в отношении вашего вопроса, таких как:

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

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

1. Можете ли вы оценить, сколько времени займет процесс «усечения» без каких-либо вставок? Мне нужно сообщить пользователям о времени простоя.

2. truncate должно быть очень быстрым (это операция DDL под капотом, она отбрасывает и воссоздает таблицу).

3. И «удаление» удаления файла объемом 50 ГБ с диска? Занимает всего несколько минут?

Ответ №2:

самый быстрый способ

  1. чтобы скопировать нужные файлы в временную таблицу.
  2. УСЕЧЕНИЕ ТАБЛИЦЫ
  3. скопируйте их обратно из временной таблицы