Wenn Sie COUNT(*)
Zählspaltenindizes aufnehmen, ist dies das beste Ergebnis. MySQL mit MyISAM- Engine speichert tatsächlich die Zeilenanzahl. Es werden nicht alle Zeilen jedes Mal gezählt, wenn Sie versuchen, alle Zeilen zu zählen. (basierend auf der Spalte des Primärschlüssels)
Die Verwendung von PHP zum Zählen von Zeilen ist nicht sehr klug, da Sie Daten von MySQL an PHP senden müssen. Warum tun Sie das, wenn Sie auf der MySQL-Seite dasselbe erreichen können?
Wenn das COUNT(*)
langsam ist, sollten Sie EXPLAIN
die Abfrage ausführen und prüfen, ob Indizes wirklich verwendet werden und wo sie hinzugefügt werden sollen.
Das Folgende ist nicht der schnellste Weg, aber es gibt einen Fall, in dem COUNT(*)
es nicht wirklich passt - wenn Sie mit dem Gruppieren von Ergebnissen beginnen, können Probleme auftreten, bei denen COUNT
nicht wirklich alle Zeilen gezählt werden.
Die Lösung ist SQL_CALC_FOUND_ROWS
. Dies wird normalerweise verwendet, wenn Sie Zeilen auswählen, aber dennoch die Gesamtzahl der Zeilen kennen müssen (z. B. für das Paging). Wenn Sie Datenzeilen auswählen, fügen Sie einfach das SQL_CALC_FOUND_ROWS
Schlüsselwort nach SELECT hinzu:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Nachdem Sie die erforderlichen Zeilen ausgewählt haben, können Sie die Anzahl mit dieser einzelnen Abfrage ermitteln:
SELECT FOUND_ROWS();
FOUND_ROWS()
muss sofort nach der Datenauswahlabfrage aufgerufen werden.
Zusammenfassend hängt alles davon ab, wie viele Einträge Sie haben und was in der WHERE-Anweisung steht. Sie sollten wirklich darauf achten, wie Indizes verwendet werden, wenn viele Zeilen vorhanden sind (Zehntausende, Millionen und mehr).
SELECT 1
und nichtSELECT *
. Ist da ein Unterschied?