Eu mesmo tive exatamente o mesmo problema. Dado o fato de que você deseja coletar uma grande quantidade desses dados e não um conjunto específico de 30, você provavelmente estará executando um loop e incrementando o deslocamento em 30.
Então, o que você pode fazer é:
- Mantenha o último id de um conjunto de dados (30) (por exemplo, lastId =530)
- Adicione a condição
WHERE id > lastId limit 0,30
Assim, você sempre pode ter um deslocamento ZERO. Você ficará surpreso com a melhoria de desempenho.