Ваше решение делает что-то вроде 2 запросов на строку в таблице table2 - что означает пару миллионов запросов - что будет довольно медленно ^^
Используя MySQL, вы можете удалить все это только в одном запросе: инструкция DELETE
может использоваться для удаления данных из нескольких таблиц.
Первым делом нужно написать инструкцию выбора, которая будет соответствовать данным, которые вы хотите удалить (это лучший способ проверить, чем попытаться удалить, не зная, действительно ли он будет работать с правильными данными) ; что-то вроде этого может сделать:
select table2.*
from table2
left join table1 on table1.text = table2.text
where table1.id is NULL
Это должно получить все данные, которые находятся в таблице 2, но отсутствуют в таблице 1.
Как только вы убедитесь, что этот запрос получает правильные данные, вы можете преобразовать его в запрос на удаление:
delete table2
from table2
left join table1 on table1.text = table2.text
where table1.id is NULL
Это может подойти - конечно, лучше сначала провести тестирование на тестовой базе данных, а не на рабочей!
Иначе, что-то с IN и подзапросом может подойти; немного похоже
delete
from table2
where text not in (select text from table1)
Не уверен, что будет быстрее, хотя, учитывая количество данных, которые у вас есть - все равно, в любом случае, я бы не делал предложенный вами цикл PHP, но использовал бы SQL-запрос, который может удалить все сам : избегание всех этих вызовов из PHP в БД, безусловно, ускорит процесс!