sql >> Database >  >> RDS >> PostgreSQL

paginering en filtering op een zeer grote tabel in postgresql (keyset paginering?)

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.



  1. Ongeldig argument opgegeven voor foreach() in Codeigniter

  2. Trek maanden af ​​van de huidige datum sql

  3. Welke vaardigheden en kennis hebben databaseontwerpers nodig?

  4. Installatiefout Oracle-client - pad te lang