Я успадкував базу даних і прагну очистити та пришвидшити її. У мене є таблиця, яка містить 30 000 000 рядків, багато з яких є непотрібними даними, введеними через помилку від імені нашого програміста. Перш ніж додати будь-які нові, більш оптимізовані індекси, я перетворив таблицю з MyISAM в InnoDB і шукаю видалити багато рядків, що містять непотрібні дані.
База даних - MySQL 5.0, і у мене є кореневий доступ до сервера. Я спочатку запускав ці команди через Adminer, а потім phpMyAdmin, обидві з однаковими результатами.
Команда, яку я виконую, -
DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
По суті, видаліть що-небудь із цього стовпця, що починається з тире -
.
Він працює близько 3-5 хвилин, а потім, коли я переглядаю список процесів, його немає.
Потім я біжу,
SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
і він повертає мільйони рядків.
Чому мій оператор видалення не завершується?
PS, я знаю, як застарілий MySQL 5.0. Я працюю над переміщенням БД до MySQL 5.6 w InnoDB (можливо, MariaDB 10 w XtraDB), але поки цього не відбудеться, я хочу відповісти на це за допомогою БД як є.
-
Редагування видалено, дивіться мою відповідь.
WHERE
.