Bei Datenbankabfragen ist die Bestimmung der Gesamtzahl der Ergebnisse vor der Anwendung von LIMIT für die Paginierung von entscheidender Bedeutung. Derzeit besteht ein gängiger Ansatz darin, die Abfrage zweimal auszuführen: einmal, um alle Ergebnisse zu zählen, und noch einmal mit einem Limit, um die gewünschte Seite abzurufen. Diese Methode kann jedoch ineffizient sein.
Glücklicherweise hat PostgreSQL 8.4 eine effizientere Lösung eingeführt: Fensterfunktionen. Mithilfe einer Fensterfunktion können Sie sowohl die Gesamtzahl der Ergebnisse als auch die begrenzten Ergebnisse in einer einzigen Abfrage abrufen.
SELECT foo , count(*) OVER() AS full_count FROM bar WHERE <some condition> ORDER BY <some col> LIMIT <pagesize> OFFSET <offset>;
Beachten Sie, dass diese Methode zwar die gewünschten Informationen liefert, aber wie alle anderen rechenintensiv sein kann Zeilen müssen verarbeitet werden, auch wenn sie durch LIMIT ausgeschlossen werden.
Verstehen der Abfolge von Ereignissen in einer SELECT-Abfrage kann dabei helfen, die Funktionsweise von Fensterfunktionen zu verstehen. Die Reihenfolge der Operationen in Postgres ist wie folgt:
Zusätzlich zu Fensterfunktionen gibt es alternative Methoden zum Abrufen der betroffenen Zeilenanzahl:
Diese Methoden liefern die Anzahl der von der Abfrage betroffenen Zeilen und nicht die vollständige Anzahl vor der LIMIT-Anwendung.
Verwandte Ressourcen:
Das obige ist der detaillierte Inhalt vonWie kann ich die Gesamtzeilenanzahl effizient ermitteln, bevor ich LIMIT in PostgreSQL anwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!