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

paginering og filtrering på en meget stor tabel i postgresql (nøglesæt paginering?)

Her er hvordan jeg håndterer dette. Til den første side, jeg henter, bruger jeg

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

Derefter, i mit klientprogram (node.js) fanger jeg id værdi fra den sidste række i resultatsættet. Når jeg har brug for den næste side, gør jeg dette.

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

Dette udnytter indekset. Og det fungerer korrekt, selvom du har slettet nogle rækker fra tabellen.

I øvrigt vil du sikkert gerne have et faldende indeks, hvis din første pagineringsside har de største id'er. CREATE UNIQUE INDEX index_id ON output USING btree (ID DESC) .

Prof tip SELECT * er skadeligt for ydeevnen på store databaser. Angiv altid de kolonner, du faktisk har brug for.



  1. Hvordan kan jeg kontrollere (Min)SQL-sætninger for syntaktisk korrekthed

  2. Kan ikke indlæse DLL "OraOps10.dll"

  3. SET NULL:Angiv en streng, der skal returneres, når der forekommer en nulværdi i SQLcl / SQL*Plus

  4. Hvordan reducerer man resultatrækker af SQL-forespørgsler lige meget i hele spektret?