Ecco come lo gestisco. Per la prima pagina che recupero, utilizzo
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
Quindi, nel mio programma client (node.js) acquisisco l'id
valore dall'ultima riga del set di risultati. Quando ho bisogno della pagina successiva, lo faccio.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
Questo sfrutta l'indice. E funziona correttamente anche se hai eliminato alcune righe dalla tabella.
A proposito, probabilmente vorrai un indice discendente se la tua prima pagina di impaginazione ha gli ID più grandi. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Suggerimento da professionista SELECT *
è dannoso per le prestazioni su database di grandi dimensioni. Elenca sempre le colonne di cui hai effettivamente bisogno.