Heim >Datenbank >MySQL-Tutorial >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?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-03 12:36:10769Durchsuche

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 begrenzenden 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:

Zählung abrufen und 10 Minuten lang zwischenspeichern:

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 eine Doppelabfrage.

Das obige ist der detaillierte Inhalt vonWie kann ich sowohl die Gesamtzahl als auch die paginierten Ergebnisse effizient von MySQL abrufen?. 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