Voici comment je gère ça. Pour la première page que je récupère, j'utilise
SELECT id, col, col, col
FROM output
ORDER BY id DESC
LIMIT 10000
Ensuite, dans mon programme client (node.js) je capture le id
valeur de la dernière ligne du jeu de résultats. Quand j'ai besoin de la page suivante, je le fais.
SELECT id, col, col, col
FROM output
WHERE id < my_captured_id_value
ORDER BY id DESC
Cela exploite l'index. Et cela fonctionne correctement même si vous avez supprimé certaines lignes du tableau.
Au fait, vous voulez probablement un index décroissant si votre première page de pagination a les plus grands identifiants. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC)
.
Conseil de pro SELECT *
nuit aux performances des grandes bases de données. Indiquez toujours les colonnes dont vous avez réellement besoin.