Bezüglich der Zeilenanzahl in der Datenbank verfügen sowohl MySQL als auch Oracle über eine verwendbare Funktion namens COUNT. Diese häufig verwendete COUNT-Funktion birgt jedoch viele Geheimnisse, insbesondere bei Vorstellungsgesprächen, und kann leicht missbraucht werden, wenn Sie nicht vorsichtig sind. Wenn Sie mir nicht glauben, versuchen Sie bitte, die folgenden Fragen zu beantworten: > 1. Wie viele Verwendungsmöglichkeiten hat COUNT? 1. Erster Blick auf COUNT1. COUNT(Ausdruck) gibt die Anzahl der von der SELECT-Anweisung abgerufenen Zeilen zurück, bei denen der Wert von Ausdruck ungleich NULL ist. Das Ergebnis ist ein BIGINT-Wert. 2. Wenn das Abfrageergebnis keinen Datensatz findet, wird 0 zurückgegeben. 3. Es ist jedoch zu beachten, dass die statistischen Ergebnisse von COUNT(*) die Anzahl der Zeilen mit NULL-Werten enthalten. Zusätzlich zu COUNT(id) und COUNT(*) können Sie auch COUNT(constant) (z. B. COUNT(1)) verwenden, um die Anzahl der Zeilen zu zählen. Was sind also die Unterschiede zwischen diesen drei SQL-Anweisungen? Welches ist effizienter? Warum verbietet das Alibaba Java Development Manual die Verwendung von COUNT(Spaltenname) oder COUNT(Konstante) anstelle von COUNT(*)? 2. Der Unterschied zwischen COUNT(Feld), COUNT(Konstante) und COUNT(*)COUNT(Konstante) und COUNT(*) geben an, dass direkt die Anzahl der Zeilen in der Datenbanktabelle abgefragt wird, die die Bedingungen erfüllen. COUNT(Spaltenname) gibt die Anzahl der Zeilen an, deren Werte der Spalten, die die Bedingungen erfüllen, nicht NULL sind. COUNT(*) ist die in SQL92 definierte Standardsyntax zum Zählen von Zeilen. Da es sich um eine Standardsyntax handelt, wurde die MySQL-Datenbank stark optimiert.
3. Optimierung von COUNT(*)MySQL verwendet hauptsächlich zwei Ausführungs-Engines:
MyISAM unterstützt keine Transaktionen und die Sperren in MyISAM sind Sperren auf Tabellenebene, während InnoDB Transaktionen und Sperren auf Zeilenebene unterstützt. MeinIsAMMyISAM hat eine einfache Optimierung vorgenommen, indem die Gesamtzahl der Zeilen in der Tabelle separat aufgezeichnet wird. Wenn count(*) ausgeführt wird, kann es direkt zurückgegeben werden, sofern keine Where-Bedingung vorliegt. MyISAM verwendet Sperren auf Tabellenebene und es gibt keine gleichzeitigen Zeilenoperationen, daher sind die Ergebnisse genau. InnoDBInnoDB kann diese Art von Cache-Operation nicht verwenden, da es Transaktionen unterstützt und die meisten Operationen Zeilensperren sind. Zeilen können parallel geändert werden, sodass die Cache-Datensätze ungenau sind. InnoDB hat jedoch einige Optimierungen für die COUNT(*)-Anweisung vorgenommen. Durchsuchen Sie die Tabelle über kostengünstige Indizes, ohne auf den spezifischen Inhalt der Tabelle zu achten. Indizes in InnoDB sind in Clustered-Indizes (Primärschlüsselindizes) und Nicht-Clustered-Indizes (Nicht-Primärschlüsselindizes) unterteilt. Die Blattknoten von Clustered-Indizes speichern die gesamte Datensatzzeile, während die Blattknoten von Nicht-Clustered-Indizes die Primärschlüsselwerte der Datensatzzeile speichern. MySQL wählt zum Scannen der Tabelle vorrangig den kleinsten nicht gruppierten Index aus. Die Voraussetzung der Optimierung besteht darin, dass die Abfrageanweisung keine Where-Bedingungen und Group-By-Bedingungen enthält. 4. COUNT(*) und COUNT(1)In der offiziellen MySQL-Dokumentation heißt es:
Daher ist die MySQL-Optimierung für count(1) und count(*) genau dieselbe und es stellt sich nicht die Frage, was schneller ist! Es wird jedoch weiterhin empfohlen, count(*) zu verwenden, da dies die von SQL92 definierte Standardsyntax zum Zählen von Zeilen ist. 5.COUNT(Feld)Führen Sie einen vollständigen Tabellenscan durch, um zu ermitteln, ob der Wert des angegebenen Felds NULL ist. Wenn nicht, fügen Sie es hinzu. Die Leistung ist langsamer als count(1) und count(*). 6. ZusammenfassungDie Funktion COUNT wird hauptsächlich verwendet, um die Anzahl der Zeilen in einer Tabelle zu zählen. Die wichtigsten Verwendungen sind COUNT(*), COUNT(Feld) und COUNT(1). Da COUNT(*) die in SQL92 definierte Standardsyntax zum Zählen von Zeilen ist, wurden in MySQL viele Optimierungen dafür vorgenommen. MyISAM zeichnet die Gesamtzahl der Zeilen in der Tabelle für COUNT(*)-Abfragen direkt auf, während InnoDB beim Scannen der Tabelle den kleinsten Index auswählt, um Kosten zu sparen. Die Prämisse dieser Optimierungen ist natürlich, dass es keine Where- und Group-Bedingungsabfrage gibt. In InnoDB gibt es keinen Unterschied bei der Implementierung von COUNT(*) und COUNT(1) und die Effizienz ist dieselbe, aber COUNT(Feld) erfordert eine Nicht-NULL-Prüfung des Felds, sodass die Effizienz geringer ist. Da COUNT(*) die von SQL92 definierte Standardsyntax zum Zählen von Zeilen ist und eine hohe Effizienz aufweist, verwenden Sie bitte COUNT(*) direkt, um die Anzahl der Zeilen in der Tabelle abzufragen! Referenzlink: Die COUNT-Anweisung von MySQL kann vom Interviewer so sehr gequält werden! ? Dies ist das Ende dieses Artikels über die Unterschiede zwischen MySQL count(1), count(*) und count(field). Weitere Informationen zu MySQL count(1), count(*) und count(field) finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Drei Beispiele für Unschärfe-Hintergrundeffekte mit CSS3
>>: Eine kurze Analyse der Grundkonzepte von HTML-Webseiten
Dieser Artikel veranschaulicht anhand von Beispie...
Ubuntu 18.04 installiert MySQL 5.7 zu Ihrer Infor...
Inhaltsverzeichnis Was ist ein Index? Prinzip der...
Senden von E-Mails mit der Mail-Funktion von PHP ...
Hier ist ein Beispielcode für die Verwendung regu...
Wenn wir eine Hintergrundfarbe mit Farbverlauf er...
Die Installations- und Konfigurationsmethoden von...
Problembeschreibung: Struktur: test hat zwei Feld...
Vorwort Wenn wir das MySQL-Datenbankkennwort verg...
Für eine Website ist dies die grundlegendste Funkt...
Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...
Inhaltsverzeichnis 0x0 Einführung 0x1 Installatio...
Übersicht über MySQL MySQL ist ein relationales D...
1. Einleitung Wenn Sie früher einen bestimmten Te...