sql >> Databasteknik >  >> RDS >> PostgreSQL

paginering och filtrering på en mycket stor tabell i postgresql (nyckeluppsättning paginering?)

Så här hanterar jag det här. För den första sidan jag hämtar använder jag

SELECT id, col, col, col 
  FROM output 
 ORDER BY id DESC
 LIMIT 10000

Sedan, i mitt klientprogram (node.js) fångar jag in id värdet från den sista raden i resultatuppsättningen. När jag behöver nästa sida gör jag detta.

 SELECT id, col, col, col
   FROM output
  WHERE id < my_captured_id_value
  ORDER BY id DESC

Detta utnyttjar indexet. Och det fungerar korrekt även om du har tagit bort några rader från tabellen.

Förresten, du vill förmodligen ha ett fallande index om din första sidnumreringssida har de största ID:n. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC) .

Proffstips SELECT * är skadligt för prestanda på stora databaser. Lista alltid de kolumner du faktiskt behöver.



  1. MySQL ger rader en livstid

  2. Lägg till 2 månader till aktuell tidsstämpel

  3. Hur man skapar befolkad MySQL Docker Image på byggtid

  4. Hur kan jag få resultat från en JPA-enhet sorterad efter avstånd?