Her er hvordan jeg håndterer dette. Til den første side, jeg henter, bruger jeg
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
Derefter, i mit klientprogram (node.js) fanger jeg id
værdi fra den sidste række i resultatsættet. Når jeg har brug for den næste side, gør jeg dette.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
Dette udnytter indekset. Og det fungerer korrekt, selvom du har slettet nogle rækker fra tabellen.
I øvrigt vil du sikkert gerne have et faldende indeks, hvis din første pagineringsside har de største id'er. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Prof tip SELECT *
er skadeligt for ydeevnen på store databaser. Angiv altid de kolonner, du faktisk har brug for.