PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

pagination et filtrage sur une très grande table dans postgresql (pagination du jeu de clés ?)

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.