Некоторое время назад я хотел удалить более 99% данных из таблицы. Таблица, которую я удалял, была таблицей сессий, в которой было более 250 миллионов строк, и я хотел получить только самые последние 500 КБ. Самый быстрый способ, которым я придумал, - это выбрать 500 000 строк, которые я хотел, в другую таблицу. Удалите старую таблицу и переименуйте новую таблицу, чтобы заменить удаленную. Это было примерно в 100 раз быстрее, чем при обычном удалении, при котором нужно выбирать записи и перестраивать таблицу.
Это также дает дополнительное преимущество, заключающееся в уменьшении размера файла таблицы, если вы используете InnoDB с innodb_file_per_table = 1, потому что таблицы InnoDB никогда не уменьшаются.