Получите наибольший идентификатор, который необходимо удалить, с помощью:
set @max_delete_id = (
select primaryID
from tblBloat
order by primaryID desc
limit 1
offset 7000000
);
Затем удалите все строки с одинаковыми или меньшими идентификаторами:
delete
from tblBloat
where primaryID <= @max_delete_id
limit 500;
Затем повторяйте второй запрос, пока не будет строк затронуты.
Хотя я бы использовал более высокий LIMIT (возможно, 10000) или пропустил LIMIT.
Обычный обходной путь для вашего запроса - заключить подзапрос в производную таблицу . (подзапрос в предложении FROM):
DELETE
FROM tblBloat
WHERE (SELECT * FROM (Select MAX(primaryID) - 7000000 from tblBloat)x) > primaryID
ORDER BY primaryID desc
LIMIT 500
Но учтите, что primaryID
может иметь пробелы по нескольким причинам, и вы будете хранить менее 7 миллионов строк.