Můžete zkusit použít LIMIT
Vlastnosti. Pokud uděláte toto:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
Získáte prvních 1 000 řádků. První LIMIT
hodnota (0) definuje počáteční řádek v sadě výsledků. Má nulový index, takže 0 znamená „první řádek“. Druhý LIMIT
hodnota je maximální počet řádků k načtení. Chcete-li získat několik dalších sad 1 000, postupujte takto:
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
A tak dále. Když SELECT
nevrací žádné řádky, jste hotovi.
To však samo o sobě nestačí, protože jakékoli změny provedené v tabulce, když zpracováváte 1 000 řádků najednou, zruší objednávku. Chcete-li zmrazit výsledky v čase, začněte dotazem na výsledky do dočasné tabulky:
CREATE TEMPORARY TABLE MyChunkedResult AS (
SELECT *
FROM MyTable
ORDER BY whatever
);
Poznámka:je dobré se předem ujistit, že dočasná tabulka neexistuje:
DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;
V každém případě, jakmile je dočasná tabulka na svém místě, vytáhněte z ní bloky řádků:
SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.
Nechám na vás, abyste vytvořili logiku, která po každém kousku vypočítá limitní hodnotu a zkontroluje konec výsledků. Také bych doporučil mnohem větší kusy než 1000 záznamů; je to jen číslo, které jsem vybral ze vzduchu.
Nakonec je dobré dočasnou tabulku po dokončení zahodit:
DROP TEMPORARY TABLE MyChunkedResult;