PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

impaginazione e filtraggio su una tabella molto grande in postgresql (impaginazione keyset?)

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.