У меня большая база данных, содержащая около 40 миллионов строк в 5 таблицах. Мне нужно удалить строки из одной таблицы, для которой столбец имеет значения, которые не существуют во второй таблице.
Я попытался написать запросы для удаления некоторых строк, а также вставить строки, которые я не хочу удалять, в другую таблицу:
DELETE FROM user_followersid WHERE followersIds_generatedId IN (SELECT * FROM generatedfollowers)
CREATE TABLE tempfollowersids as SELECT * FROM user_followersid WHERE followersIds_generatedId IN (SELECT generatedId from followersid WHERE followerId IN (SELECT * FROM topusers));
Это занимает много времени для удалений и каждый раз заканчивается неудачей и сообщает о следующей ошибке:
ERROR 1206 (HY000): The total number of locks exceeds the lock table size
Я даже пытался удалять только несколько строк за раз, используя LIMIT
, но это также отнимает много времени. Я знаю, что IN
очень медленно. Но я не могу найти альтернативный способ написания своих запросов.
Есть идеи, как мне удалить строки?