PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Paginierung und Filterung einer sehr großen Tabelle in Postgresql (Keyset-Paginierung?)

So handhabe ich das. Für die erste Seite, die ich abrufe, verwende ich

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

Dann erfasse ich in meinem Client-Programm (node.js) die id Wert aus der letzten Zeile der Ergebnismenge. Wenn ich die nächste Seite brauche, mache ich das.

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

Dies nutzt den Index aus. Und es funktioniert auch dann korrekt, wenn Sie einige Zeilen aus der Tabelle gelöscht haben.

Übrigens möchten Sie wahrscheinlich einen absteigenden Index, wenn Ihre erste Paginierungsseite die größten IDs hat. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC) .

Profi-Tipp SELECT * beeinträchtigt die Leistung großer Datenbanken. Listen Sie immer die Spalten auf, die Sie tatsächlich benötigen.