„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich sowohl die Gesamtzahl als auch die paginierten Ergebnisse effizient von MySQL abrufen?

Wie kann ich sowohl die Gesamtzahl als auch die paginierten Ergebnisse effizient von MySQL abrufen?

Veröffentlicht am 21.12.2024
Durchsuche:112

How Can I Efficiently Retrieve Both Total Count and Paginated Results from MySQL?

MySQL-Paginierung: Effizientes Abrufen von Ergebnissen und Gesamtzahl

Bei der Implementierung der Paginierung in MySQL ist es üblich, zwei separate Abfragen durchzuführen: eine bis Ermitteln Sie die Gesamtzahl der Ergebnisse und einen weiteren, um die abgerufenen Datensätze zu begrenzen. Dieser als Doppelabfrage bezeichnete Ansatz kann bei großen Datensätzen ineffizient sein.

Es stellt sich jedoch die Frage, ob es möglich ist, sowohl die Gesamtergebniszahl abzurufen als auch die Ergebnisse in einer einzigen Abfrage einzuschränken. Obwohl es keine direkte Möglichkeit gibt, dies zu erreichen, stehen zwei alternative Methoden zur Verfügung:

SQL_CALC_FOUND_ROWS und FOUND_ROWS()

Anstelle einer doppelten Abfrage können Sie SQL_CALC_FOUND_ROWS verwenden und FOUND_ROWS()-Funktionen, um ein ähnliches Ergebnis zu erzielen. Die Abfrage mit SQL_CALC_FOUND_ROWS geht der einschränkenden Abfrage voraus und der Aufruf FOUND_ROWS() ruft die Gesamtzahl ab.

Beispiel:

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition`;
SELECT FOUND_ROWS();

Hinweis: Diese Methode hat einen potenziellen Nachteil. MySQL hat einen Fehler, der sich auf ORDER BY-Abfragen bei Verwendung dieser Technik auswirkt und sie bei großen Tabellen langsamer macht.

Zählung zwischenspeichern

Eine alternative Lösung besteht darin, die Gesamtzahl zwischenzuspeichern für eine bestimmte Dauer. Dieser Ansatz macht eine separate Abfrage zum Abrufen der Anzahl überflüssig und sorgt gleichzeitig für Effizienz.

Beispiel:

Rufen Sie die Anzahl ab und speichern Sie sie für 10 Minuten:

SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);

Verwenden Sie in nachfolgenden Abfragen die zwischengespeicherte Anzahl:

SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;

Zählung zwischenspeichern Verbessert die Leistung erheblich, insbesondere bei häufig besuchten Seiten. Obwohl es sich nicht um eine Einzelabfragelösung handelt, erzielt sie das gleiche Ergebnis und ist gleichzeitig effizienter als die Doppelabfrage.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3