Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gesamtzahl der Zeilen abrufen, wenn LIMIT verwendet wird?

Glücklicherweise können Sie seit MySQL 4.0.0 SQL_CALC_FOUND_ROWS verwenden Option in Ihrer Abfrage, die MySQL anweist, die Gesamtzahl der Zeilen ohne Berücksichtigung von LIMIT zu zählen Klausel. Sie müssen immer noch eine zweite Abfrage ausführen, um die Zeilenanzahl abzurufen, aber es ist eine einfache Abfrage und nicht so komplex wie Ihre Abfrage, die die Daten abgerufen hat. Die Verwendung ist ziemlich einfach. In Ihrer Hauptabfrage müssen Sie SQL_CALC_FOUND_ROWS hinzufügen Option direkt nach SELECT und in der zweiten Abfrage müssen Sie FOUND_ROWS() verwenden Funktion, um die Gesamtzahl der Zeilen zu erhalten. Abfragen würden wie folgt aussehen:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();

Die einzige Einschränkung besteht darin, dass Sie die zweite Abfrage unmittelbar nach der ersten aufrufen müssen, da SQL_CALC_FOUND_ROWS speichert nirgendwo die Anzahl der Zeilen. Obwohl diese Lösung auch zwei Abfragen erfordert, ist sie viel schneller, da Sie die Hauptabfrage nur einmal ausführen. Sie können mehr über SQL_CALC_FOUND_ROWS und FOUND_ROWS() in MySQL-Dokumentation.

BEARBEITEN: Beachten Sie, dass das zweimalige Ausführen der Abfrage in den meisten Fällen tatsächlich schneller ist als SQL_CALC_FOUND_ROWS . siehe hier

EDIT 2019:

Der SQL_CALC_FOUND_ROWS-Abfragemodifikator und die zugehörige FOUND_ROWS()-Funktion sind ab MySQL 8.0.17 veraltet und werden in einer zukünftigen MySQL-Version entfernt.

https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows

Es wird empfohlen, COUNT zu verwenden stattdessen

SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;