Как правильно работать с большими таблицами?
Лучше выбирать по 1000/5000 записей получать максимальное значение  id (PK) и идти дальше, смещаясь по primary key. where id > ? limit 1000 order by id asc
 Limit/offset не гуд на больших объемах - так как, к примеру,  offset 10000 limit 1000  переберет 10к строчек чтобы отдать 1000
при таких объемах надо смотреть в сторону хранимых процедур. Не дело таскать дохреллион данных между пхп и мускулем, в базу все равно как-то алгоритмично вносятся изменения? Так перенесите логику в бд. Это чисто для бд задача - перелопатить кучу данных из таблицы и внести изменения.