Hier is hoe ik dit aanpak. Voor de eerste pagina die ik ophaal, gebruik ik
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
Vervolgens leg ik in mijn clientprogramma (node.js) de id
. vast waarde uit de laatste rij van de resultatenset. Als ik de volgende pagina nodig heb, doe ik dit.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
Dit maakt misbruik van de index. En het werkt correct, zelfs als u enkele rijen uit de tabel hebt verwijderd.
Trouwens, je wilt waarschijnlijk een aflopende index als je eerste pagineringspagina de grootste id's heeft. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Pro-tip SELECT *
is schadelijk voor de prestaties van grote databases. Vermeld altijd de kolommen die u echt nodig heeft.