Możesz spróbować użyć LIMIT
funkcja. Jeśli to zrobisz:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
Otrzymasz pierwsze 1000 wierszy. Pierwszy LIMIT
wartość (0) definiuje wiersz początkowy w zestawie wyników. Jest indeksowany do zera, więc 0 oznacza „pierwszy wiersz”. Drugie LIMIT
wartość to maksymalna liczba wierszy do pobrania. Aby uzyskać kilka następnych zestawów po 1000, zrób tak:
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
I tak dalej. Gdy SELECT
nie zwraca żadnych wierszy, gotowe.
To jednak samo w sobie nie wystarczy, ponieważ wszelkie zmiany wprowadzone w tabeli podczas przetwarzania wierszy o wielkości 1 tys. Aby zamrozić wyniki w czasie, zacznij od przesłania wyników do tabeli tymczasowej:
CREATE TEMPORARY TABLE MyChunkedResult AS (
SELECT *
FROM MyTable
ORDER BY whatever
);
Uwaga dodatkowa:dobrze jest wcześniej upewnić się, że tabela tymczasowa nie istnieje:
DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;
W każdym razie, gdy tabela tymczasowa jest już na miejscu, wyciągnij stamtąd fragmenty wiersza:
SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.
Pozostawię tobie stworzenie logiki, która obliczy wartość graniczną po każdym kawałku i sprawdzi koniec wyników. Polecam również znacznie większe fragmenty niż 1000 rekordów; to tylko numer, który wybrałem z powietrza.
Na koniec dobrze jest usunąć tabelę tymczasową po zakończeniu:
DROP TEMPORARY TABLE MyChunkedResult;