Я выполнил много разных запросов DELETE для множества таблиц в огромной базе данных (сотни миллионов записей). Что было бы быстрее - запускать OPTIMIZE TABLE для каждой измененной таблицы. Или просто запустить mysqldump в файл, а затем восстановить из файла?
Думаю, что это будет равно. Просто mysqldump | mysql будет быстрее;)
OPTIMISE TABLE
будет быстрее, так как данные не нужно будет преобразовывать в текстовый формат, используемый mysqldump
а затем переваривается mysql
клиент командной строки.
Если вы используете InnoDB
тогда вы можете сделать еще один трюк,
ALTER TABLE $table ENGINE innodb;
При этом таблица будет перестроена путем копирования всех строк в новое табличное пространство и замены текущей таблицы после завершения. Однако пока это происходит, исходная таблица не будет блокировать считыватели. Писатели, конечно, будут заблокированы от обновления до завершения операции.