Я бы вообще использовал другую логику в вашем приложении (правда, это зависит от ваших целей и сильно завязано на то, что делает ваше приложение).
Если разбор данных (вы же их зачем-то получаете) осуществляется быстро, узкое место - база данных и кроме этого вам с этими данными ничего не надо делать, я бы делал так:
Извлекаем данные большими партиями (1000-10000).
Для извлечения используем наш primary index (id), который уникален, AUTO_INCREMENT и поиск по которому идет быстро.
после окончания операции фиксируем последний обработанный id (пишем в БД в отдельную таблицу, если планируете прерывать скрипт, или просто сохраняем в переменную, если не планируете), и повторяем все заново (обрабатываем новую порцию данных).
Запрос для извлечения был бы примерно таким:
SELECT * FROM data WHERE id > :last_id ORDER BY id ASC LIMIT :limit
где last_id - последний обработанный, limit - количество элементов в нашей порции данных.
Но, опять же, все это сильно зависит от специфики приложения.