Ich war selbst neugierig darauf. Es ist in Ordnung, Dokumentation und theoretische Antworten zu lesen, aber ich mag es, diese mit empirischen Beweisen in Einklang zu bringen.
Ich habe eine MySQL-Tabelle (InnoDB) mit 5.607.997 Datensätzen. Die Tabelle befindet sich in meiner eigenen privaten Sandbox, daher weiß ich, dass der Inhalt statisch ist und niemand den Server verwendet. Ich denke, dies beseitigt effektiv alle äußeren Auswirkungen auf die Leistung. Ich habe eine Tabelle mit einem Auto_increment-Primärschlüsselfeld (ID), von dem ich weiß, dass es niemals null sein wird, das ich für meinen where-Klauseltest verwenden werde (WHERE-ID IST NICHT NULL).
Der einzige andere mögliche Fehler, den ich beim Ausführen von Tests sehe, ist der Cache. Das erste Mal, wenn eine Abfrage ausgeführt wird, ist immer langsamer als nachfolgende Abfragen, die dieselben Indizes verwenden. Ich werde das unten als Cache-Seeding-Aufruf bezeichnen. Um es ein wenig zu verwechseln, habe ich es mit einer where-Klausel ausgeführt, von der ich weiß, dass sie unabhängig von Daten immer als wahr ausgewertet wird (TRUE = TRUE).
Das heißt hier sind meine Ergebnisse:
Abfragetyp
| w/o WHERE | where id is not null | where true=true
ANZAHL()
| 9 min 30.13 sec ++ | 6 min 16.68 sec ++ | 2 min 21.80 sec ++
| 6 min 13.34 sec | 1 min 36.02 sec | 2 min 0.11 sec
| 6 min 10.06 se | 1 min 33.47 sec | 1 min 50.54 sec
COUNT (Id)
| 5 min 59.87 sec | 1 min 34.47 sec | 2 min 3.96 sec
| 5 min 44.95 sec | 1 min 13.09 sec | 2 min 6.48 sec
COUNT (1)
| 6 min 49.64 sec | 2 min 0.80 sec | 2 min 11.64 sec
| 6 min 31.64 sec | 1 min 41.19 sec | 1 min 43.51 sec
++ Dies wird als Cache-Seeding-Aufruf betrachtet. Es wird erwartet, dass es langsamer als der Rest ist.
Ich würde sagen, die Ergebnisse sprechen für sich. COUNT (Id) verdrängt normalerweise die anderen. Das Hinzufügen einer Where-Klausel verkürzt die Zugriffszeit erheblich, selbst wenn es sich um eine Klausel handelt, von der Sie wissen, dass sie als wahr ausgewertet wird. Der Sweet Spot scheint COUNT (Id) zu sein ... WO Id NICHT NULL ist.
Ich würde gerne die Ergebnisse anderer Leute sehen, vielleicht mit kleineren Tabellen oder mit where-Klauseln gegen andere Felder als das Feld, das Sie zählen. Ich bin sicher, dass es andere Variationen gibt, die ich nicht berücksichtigt habe.