Wenn Sie COUNT(*)
es nimmt Zählspaltenindizes auf, also wird es das beste Ergebnis sein. MySQL mit MyISAM Die Engine speichert tatsächlich die Zeilenanzahl, sie zählt nicht jedes Mal alle Zeilen, 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 schlau, da Sie Daten von mysql an php senden müssen. Warum tun, wenn Sie dasselbe auf der MySQL-Seite erreichen können?
Wenn der COUNT(*)
langsam ist, sollten Sie EXPLAIN
ausführen auf die Abfrage, und prüfen Sie, ob Indizes wirklich verwendet werden und wo sie hinzugefügt werden sollten.
Das Folgende ist nicht das schnellste Weise, aber es gibt einen Fall, in dem COUNT(*)
passt nicht wirklich - wenn Sie anfangen, Ergebnisse zu gruppieren, können Sie auf ein Problem stoßen, bei dem COUNT
zählt nicht wirklich alle Zeilen.
Die Lösung ist SQL_CALC_FOUND_ROWS
. Dies wird normalerweise verwendet, wenn Sie Zeilen auswählen, aber dennoch die Gesamtzeilenanzahl kennen müssen (z. B. zum Paging). Wenn Sie Datenzeilen auswählen, hängen Sie einfach den SQL_CALC_FOUND_ROWS
an Schlüsselwort nach SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
Nachdem Sie die benötigten Zeilen ausgewählt haben, können Sie die Anzahl mit dieser einzigen Abfrage abrufen:
SELECT FOUND_ROWS();
FOUND_ROWS()
muss unmittelbar nach der Datenauswahlabfrage aufgerufen werden.
Abschließend kommt es darauf an, wie viele Einträge Sie haben und was in der WHERE-Anweisung steht. Sie sollten wirklich darauf achten, wie Indizes verwendet werden, wenn es viele Zeilen gibt (Zehntausende, Millionen und mehr).