Можете да опитате да използвате LIMIT
отличителен белег. Ако направите това:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
Ще получите първите 1000 реда. Първият LIMIT
стойност (0) дефинира началния ред в набора от резултати. Той е с нулев индекс, така че 0 означава "първият ред". Вторият LIMIT
стойност е максималният брой редове за извличане. За да получите следващите няколко комплекта от 1000, направете това:
SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000
SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000
И така нататък. Когато SELECT
не връща редове, готово е.
Това обаче не е достатъчно само по себе си, тъй като всякакви промени, направени в таблицата, докато обработвате вашите 1K реда наведнъж, ще изхвърлят поръчката. За да замразите резултатите във времето, започнете със заявка за резултатите във временна таблица:
CREATE TEMPORARY TABLE MyChunkedResult AS (
SELECT *
FROM MyTable
ORDER BY whatever
);
Странична бележка:добра идея е предварително да се уверите, че временната таблица не съществува:
DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;
Във всеки случай, след като временната таблица е на мястото си, издърпайте парчетата ред от там:
SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.
Ще оставя на вас да създадете логиката, която ще изчислява граничната стойност след всяка част и ще проверява за края на резултатите. Също така бих препоръчал много по-големи парчета от 1000 записа; това е просто число, което избрах от въздуха.
И накрая, добра форма е да махнете временната таблица, когато сте готови:
DROP TEMPORARY TABLE MyChunkedResult;