CREATE TEMPORARY TABLE tt;
INSERT INTO tt; many times
SELECT FROM tt ORDER BY id LIMIT ?,1000;
A tabela temporária é criada no início do script com uma coluna "id" auto_increment (e outras). A parte 1 do script preenche a tabela usando vários SELECTs. A parte 2 deve processar todas as linhas selecionadas em blocos de 1.000, mas nunca mais gravará a tabela.
Eu suponho que esses dois comandos são os mesmos
SELECT FROM tt ORDER BY id LIMIT ?,1000;
SELECT FROM tt LIMIT ?,1000;
mas isso é verdade? Existe alguma chance de que o mySQL recupere as linhas em uma ordem diferente em vários SELECTs, mesmo que a tabela não esteja escrita entre eles?
Classificar a tabela temporária é a parte mais longa durante a leitura e ficaria feliz em me livrar da parte ORDER BY, mas não quero perder nenhum registro porque a ordem mudou entre SELECT LIMIT 0,1000 e SELECT LIMIT 1000, 1000.