Heim >Datenbank >MySQL-Tutorial >Wie kann ich die Gesamtzahl der Zeilen effizient ermitteln, bevor ich LIMIT in PostgreSQL-Abfragen anwende?
Das Paging von Datenbankdaten erfordert normalerweise die Bestimmung der Gesamtzahl der Seiten, um die Paging-Steuerung darzustellen. Normalerweise erfordert dies die Ausführung zweier separater Abfragen: eine mit COUNT(), um die Gesamtsumme zu erhalten, und eine andere mit LIMIT, um die Daten der aktuellen Seite abzurufen.
Diese Methode ist ineffizient. Glücklicherweise gibt es in PostgreSQL eine bessere Möglichkeit, die Gesamtsumme zu ermitteln, bevor LIMIT angewendet wird: Verwenden Sie Fensterfunktionen.
Die in PostgreSQL 8.4 eingeführten Fensterfunktionen ermöglichen es uns, Berechnungen an einem durch ein „Fenster“ definierten Datensatz durchzuführen. Durch Angabe eines geeigneten Fensters können wir die Gesamtsumme abrufen, ohne die LIMIT-Operation zu beeinträchtigen.
Bedenken Sie die folgende Abfrage:
<code class="language-sql">SELECT foo, COUNT(*) OVER() AS full_count FROM bar WHERE <some condition=""> ORDER BY <some col=""> LIMIT <pagesize> OFFSET <offset>;</code>
Hier gibt full_count
die Gesamtzahl der Zeilen an, bevor LIMIT angewendet wird.
Hinweis: Die Verwendung von Fensterfunktionen auf diese Weise kann rechenintensiv sein als der herkömmliche Ansatz mit zwei Abfragen. Dies liegt daran, dass alle Zeilen unabhängig von den Paging-Parametern gezählt werden müssen.
In manchen Fällen ist es nicht erforderlich, den Gesamtbetrag vor LIMIT zu ermitteln. Eine Alternative ist:
Das obige ist der detaillierte Inhalt vonWie kann ich die Gesamtzahl der Zeilen effizient ermitteln, bevor ich LIMIT in PostgreSQL-Abfragen anwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!