sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql:offset + limit blir väldigt långsam

Använd en markör istället. Att använda en OFFSET och LIMIT är ganska dyrt - eftersom pg måste utföra en fråga, bearbeta och hoppa över en OFFSET-rader. OFFSET är som att "hoppa över rader", det är dyrt.

markördokumentation

Markören tillåter en iteration över en fråga.

BEGIN
DECLARE C CURSOR FOR SELECT * FROM big_table;
FETCH 300 FROM C; -- get 300 rows
FETCH 300 FROM C; -- get 300 rows
...
COMMIT;

Förmodligen kan du använda en markör på serversidan utan att uttryckligen använda DECLARE-satsen, bara med stöd i psycopg (sök avsnitt om markörer på serversidan).



  1. Omordning av kolumndata i mysql

  2. Förälder Barnförhållande med en enda enhet i doktrin 2

  3. PHP/MySQL:Hämta en enda sökväg i Adjacency List-modellen

  4. Postgres ratio_to_report funktion