sql >> Database teknologi >  >> RDS >> Mysql

MySQL:Hent et stort udvalg i bidder

Du kan prøve at bruge LIMIT funktion. Hvis du gør dette:

SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000

Du får de første 1.000 rækker. Den første LIMIT værdi (0) definerer startrækken i resultatsættet. Det er nulindekseret, så 0 betyder "den første række". Den anden LIMIT værdi er det maksimale antal rækker at hente. For at få de næste par sæt af 1.000 skal du gøre dette:

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

Og så videre. Når SELECT returnerer ingen rækker, du er færdig.

Dette er dog ikke nok i sig selv, fordi enhver ændring af tabellen, mens du behandler dine 1.000 rækker ad gangen, vil afvise ordren. For at fryse resultaterne i tide, start med at forespørge resultaterne i en midlertidig tabel:

CREATE TEMPORARY TABLE MyChunkedResult AS (
  SELECT *
  FROM MyTable
  ORDER BY whatever
);

Sidebemærkning:det er en god idé at sikre, at den midlertidige tabel ikke eksisterer på forhånd:

DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;

I hvert fald, når det midlertidige bord er på plads, skal du trække rækkestykkerne derfra:

SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.

Jeg overlader det til dig at oprette logikken, der beregner grænseværdien efter hver del og kontrollerer slutningen af ​​resultaterne. Jeg vil også anbefale meget større bidder end 1.000 plader; det er bare et nummer, jeg har plukket ud af luften.

Endelig er det en god form at droppe den midlertidige tabel, når du er færdig:

DROP TEMPORARY TABLE MyChunkedResult;


  1. Returner alle mulige kombinationer af værdier på kolonner i SQL

  2. Henter koordinaterne for MySQL-punkttypen

  3. Sådan fungerer DateTime()-funktionen i SQLite

  4. Barkers notation