Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die Gesamtergebnisanzahl in PostgreSQL effizient abrufen, bevor LIMIT angewendet wird?

Wie kann ich die Gesamtergebnisanzahl in PostgreSQL effizient abrufen, bevor LIMIT angewendet wird?

DDD
DDDOriginal
2024-12-13 22:48:11701Durchsuche

How to Efficiently Retrieve Total Result Count in PostgreSQL Before Applying LIMIT?

Optimaler Ansatz zum Abrufen der Ergebnisanzahl vor der Limitanwendung

Beim Datenbank-Paging ist die Bestimmung der Gesamtzahl der Seiten für die Darstellung von Paginierungskontrollen von entscheidender Bedeutung. Allerdings kann die Ausführung separater Zähl- und Grenzwertabfragen zu diesem Zweck ineffizient sein. In diesem Artikel wird eine verbesserte Technik untersucht, um die Ergebnisanzahl zu erhalten, ohne Datenbankbeschränkungen anzuwenden.

Postgres-Fensterfunktionen

PostgreSQL-Versionen 8.4 und höher führten Fensterfunktionen ein, die die Berechnung von Aggregatfunktionen über partitionierte Teilmengen von ermöglichten Daten. Dies ermöglicht es uns, die Gesamtzahl zu ermitteln und das begrenzte Ergebnis in einer einzigen Abfrage abzurufen.

SELECT foo,
       COUNT(*) OVER() AS full_count
FROM bar
WHERE <some condition>
ORDER BY <some col>
LIMIT <pagesize>
OFFSET <offset>;

Diese Methode kann jedoch zu zusätzlichem Leistungsaufwand führen, da alle qualifizierten Zeilen gezählt werden müssen, was möglicherweise die Leistung bei großen Zeilen beeinträchtigt Tabellen oder OFFSET-Werte nahe der Gesamtzeilenanzahl.

Alternative Optionen für die Ergebniszählung

In Fällen, in denen die Leistung ein Problem darstellt, können alternative Ansätze verwendet werden verwendet werden, um die endgültige Anzahl der betroffenen Zeilen zu erhalten, unabhängig von OFFSET- und LIMIT-Anwendungen. Die interne Buchhaltung von Postgres verfolgt diese Informationen, auf die einige Clients zugreifen können.

  • PL/pgSQL: Rufen Sie die Zeilenanzahl nach der Ausführung eines SQL-Befehls mit GET DIAGNOSTICS ab.
  • PHP: Verwenden Sie die Funktion pg_num_rows, um die Anzahl der Betroffenen zu ermitteln Zeilen.

Zusätzliche Ressourcen

  • [Berechnen der Anzahl der von Batch-Abfragen betroffenen Zeilen in PostgreSQL](https://dba.stackexchange.com/questions/247142/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

Das obige ist der detaillierte Inhalt vonWie kann ich die Gesamtergebnisanzahl in PostgreSQL effizient abrufen, bevor LIMIT angewendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn