Я унаследовал базу данных и ищу, чтобы очистить и ускорить ее. У меня есть таблица, которая содержит 30 000 000 строк, многие из которых являются ненужными данными, вставленными из-за ошибки от имени нашего программиста. Прежде чем добавлять какие-либо новые, более оптимизированные индексы, я преобразовал таблицу из MyISAM в InnoDB и собираюсь удалить множество строк, содержащих нежелательные данные.
База данных MySQL 5.0, и у меня есть root-доступ к серверу. Сначала я запускал эти команды через Adminer, а затем phpMyAdmin, оба с одинаковыми результатами.
Я запускаю команду
DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
По сути, удалите в этом столбце все, что начинается с тире -
.
Он работает в течение 3-5 минут, а затем, когда я просматриваю список процессов, он исчез.
Я бегу,
SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
и он возвращает миллионы строк.
Почему мое заявление об удалении не завершается?
PS, я в курсе того, насколько устарел MySQL 5.0. Я работаю над переносом БД на MySQL 5.6 с InnoDB (может быть MariaDB 10 с XtraDB), но пока этого не произойдет, я жду ответа с БД как есть.
-
Редактирование удалено, смотрите мой ответ.
WHERE
.LIMIT
понижение; скажем, 10000.)Самое простое решение - просто не делать этого - делать меньшее удаление, которое легче обрабатывать.
В этом случае я бы порекомендовал попробовать последовательное удаление формы:
источник
Может быть, вы могли бы сделать что-то вроде этого:
deleted
.UPDATE tablename SET deleted=1 WHERE `columnname` LIKE '-a%'
.cron
чтобы удалить это в ночное время.источник