sql >> Databáze >  >> RDS >> PostgreSQL

postgresql:offset + limit bude velmi pomalý

Místo toho použijte kurzor. Použití OFFSET a LIMIT je docela drahé - protože pg musí provést dotaz, zpracovat a přeskočit OFFSET řádky. OFFSET je něco jako „přeskakování řádků“, což je drahé.

dokumentace kurzoru

Kurzor umožňuje iteraci přes jeden dotaz.

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

Pravděpodobně můžete použít kurzor na straně serveru bez explicitního použití příkazu DECLARE, pouze s podporou v psycopg (vyhledávací sekce o kurzorech na straně serveru).



  1. Vytváření asociativního pole na úrovni balíčku v jazyce Java

  2. MySQL PHP skupina po dnech a celkem za každý den

  3. Uživatelské vstupy, vyčistěte a dezinfikujte před odesláním do db

  4. opravdu jednoduché SQL Not a GROUP BY výraz - Oracle