sql >> Databáze >  >> RDS >> Mysql

MySQL:získat velký výběr po kouscích

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;


  1. Jak změním tabulku MySQL na UTF-8?

  2. pomocí implode pro pole uvnitř mysql kde v klauzuli

  3. Transformace řádků na sloupce v MySQL

  4. Připojení Oracle 21c k SQL Serveru