Detaillierte Erklärung zur korrekten Verwendung der Zählfunktion in MySQL

Detaillierte Erklärung zur korrekten Verwendung der Zählfunktion in MySQL

1. Beschreibung

Wenn wir in MySQL die Gesamtzahl der Zeilen in einer Tabelle ermitteln müssen, verwenden wir normalerweise die folgende Anweisung

Wählen Sie Anzahl(*) aus der Tabelle aus.

Tatsächlich können neben * auch andere Parameter in die Zählfunktion eingefügt werden, z. B. Konstanten, Primärschlüssel-IDs und Felder. Was ist also der Unterschied zwischen ihnen? Wie effizient sind sie? Welche Methode sollten wir verwenden, um die Anzahl der Zeilen in der Tabelle zu erhalten?

Sobald Sie das Funktionsprinzip der Zählfunktion verstanden haben, werden die Antworten auf die obigen Fragen meiner Meinung nach klarer.

2. Tabellenstruktur

Um das obige Problem zu lösen, habe ich eine Benutzertabelle mit zwei Feldern erstellt: Primärschlüssel-ID und Name, letzterer kann null sein. Die Anweisung zur Tabellenerstellung lautet wie folgt.

CREATE TABLE `Benutzer` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel',
 `name` varchar(255) STANDARD NULL KOMMENTAR 'Name',
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Diese Tabelle enthält 6.000.000 Datensätze. Das Namensfeld der ersten 1.000.000 Datensätze ist leer und die restlichen Datensätze haben Name=ID. Der Code zum Erstellen von Testdaten mithilfe einer gespeicherten Prozedur lautet wie folgt

- Verwenden Sie gespeicherte Prozeduren, um Testdatentrennzeichen zu erstellen;;
Prozedur idata() erstellen
beginnen 
 deklariere i int; 
 setze i=1; 
 während(i<=6000000)mache 
  in Benutzerwerte (i, i) einfügen;
  setze i=i+1; 
 Ende während;
Ende;;
Trennzeichen;
rufen Sie idata() auf;
-- Setzen Sie das Namensfeld der ersten 1.000.000 Datensätze auf null
Benutzersatzname aktualisieren=null, wobei ID<1000000;

3. Ausführen von SQL-Anweisungen und Ergebnissen

Um die Unterschiede zwischen den verschiedenen Parametern der Zählfunktion zu unterscheiden, wird die Ausführungseffizienz von SQL hauptsächlich anhand der beiden Aspekte Ausführungszeit und Anzahl der gescannten Zeilen beschrieben. Die Eigenschaften der Zählfunktion werden auch anhand der zurückgegebenen Ergebnisse beschrieben.

  • * Symbol – select count(*) from user ;
  • Konstante - select count(1) from user ;
  • Nicht leere Felder – select count(id) from user ;
  • Nullable Felder - select count(name) from user ;

3.1 * Symbol

mysql> wähle count(*) vom Benutzer aus;
+----------+
| Anzahl(*) |
+----------+
| 6000000 |
+----------+
1 Zeile im Satz (0,76 Sek.)

Durchlaufen Sie die gesamte Tabelle, nehmen Sie keine Werte an (nach der Optimierung darf sie nicht null sein, nehmen Sie keine Werte an), sammeln Sie die Zählungen und geben Sie schließlich die Ergebnisse zurück.

3.2 Konstanten

mysql> wähle count(1) vom Benutzer aus;
+----------+
| Anzahl(1) |
+----------+
| 6000000 |
+----------+
1 Zeile im Satz (0,76 Sek.)

Durchlaufen Sie die gesamte Tabelle, rufen Sie die Daten Zeile für Zeile ab, weisen Sie jeder Zeile den Wert 1 zu, stellen Sie fest, dass das Feld nicht leer sein kann, akkumulieren Sie die Anzahl und geben Sie schließlich das Ergebnis zurück.

3.3 Nicht leere Felder

mysql> wähle Anzahl(ID) vom Benutzer aus;
+-------------+
| Anzahl(ID) |
+-------------+
| 6000000 |
+-------------+
1 Zeile im Satz (0,85 Sek.)

Durchlaufen Sie die gesamte Tabelle, rufen Sie die Daten Zeile für Zeile ab (zum Durchlaufen wird der kleinste Indexbaum ausgewählt, daher ist dies effizienter als das Zählen von Feldern in derselben Situation), rufen Sie die Primärschlüssel-ID jeder Zeile ab, stellen Sie fest, dass das Feld nicht leer sein kann, akkumulieren Sie die Anzahl und geben Sie schließlich das Ergebnis zurück.

3.4 Nullable-Felder

mysql> wähle count(name) vom Benutzer aus;
+-------------+
| Anzahl(Name) |
+-------------+
| 5900001 |
+-------------+
1 Zeile im Satz (0,93 Sek.)
  • Wenn die Felddefinition nicht leer ist: Durchlaufen Sie die gesamte Tabelle, rufen Sie die Daten Zeile für Zeile ab, rufen Sie das Feld jeder Zeile ab, stellen Sie fest, dass das Feld nicht leer sein kann, akkumulieren Sie die Anzahl und geben Sie schließlich das Ergebnis zurück.
  • Wenn die Felddefinition null sein kann: Durchlaufen Sie die gesamte Tabelle, holen Sie die Daten Zeile für Zeile ab, holen Sie das Feld in jeder Zeile ab, bestimmen Sie, ob das Feld null sein kann, und bestimmen Sie dann, ob der Wert des Felds null ist. Wenn es nicht null ist, akkumulieren Sie die Anzahl und geben Sie schließlich das Ergebnis zurück.
  • Wenn das Feld keinen Index hat, wird der Primärschlüssel-Indexbaum durchlaufen.

4. Analyse der Ausführungsergebnisse

4.1 Ergebnismenge

Zunächst einmal ist aus Sicht des Ergebnissatzes der Zweck der ersten drei SQL-Anweisungen derselbe: Sie geben die Anzahl aller Zeilen zurück. Wenn der Parameter count ein normales Feld ist und das Feld standardmäßig null ist, wird die Anzahl der Zeilen zurückgegeben, in denen das Feld nicht null ist.

4.2 Ausführungszeit

Aus Sicht der Ausführungszeit beträgt die Effizienz ungefähr count(可為空的字段) < count(非空字段) < count(常數) < count(*) .

5. Fazit

Count ist eine Aggregatfunktion. Für den zurückgegebenen Ergebnissatz wird zeilenweise beurteilt. Wenn der Parameter der Zählfunktion nicht NULL ist, wird der kumulierte Wert um 1 erhöht, andernfalls wird er nicht erhöht. Abschließend wird der kumulierte Wert zurückgegeben.

  • Der Grund, warum count(*) am schnellsten ist, liegt darin, dass beim Zählen nicht der Wert jeder einzelnen Datenzeile berücksichtigt wird.
  • Der Grund, warum count(1) etwas langsamer ist als count(*) besteht darin, dass es jeder Zeile den Wert 1 zuweist.
  • Der Grund, warum count(非空字段) etwas langsamer ist als count(1) besteht darin, dass es die Primärschlüssel-ID aus jeder Datenzeile extrahiert.
  • Der Grund, warum count(可為空的字段) am langsamsten ist, besteht darin, dass möglicherweise ermittelt werden muss, ob das Feld in jeder Datenzeile null ist.

Daher ist es besser, count(*) zu verwenden.

Oben finden Sie ausführliche Informationen zur korrekten Verwendung der Zählfunktion in MySQL. Weitere Informationen zur MySQL-Zählfunktion finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Optimierte Implementierung von count() für große MySQL-Tabellen
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • Austausch über Probleme bei der Zähloptimierung in InnoDB in MySQL
  • Lassen Sie uns über die Leistung von MySQLs COUNT(*) sprechen.
  • Eine kurze Diskussion über die MySQL-Zeilenanzahl
  • Zusammenfassung der Methoden zur Verbesserung der MySQL-Anzahl
  • Detaillierte Erklärung der Zählung ohne Filterbedingungen in MySQL
  • Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL
  • Detaillierte Erläuterung von MySQL-Zähldatenbeispielen in mehreren Tabellen
  • Verwendung und Optimierung der MySQL COUNT-Funktion

<<:  Beispielcode zur Verwendung der Elementkalenderkomponente in Vue

>>:  So erstellen Sie DockerHub selbst

Artikel empfehlen

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort Hinweis: Die Testdatenbankversion ist MyS...

JavaScript Canvas implementiert die Bewegung des Balls entlang der Maus

In diesem Artikelbeispiel wird der spezifische Co...

Detailliertes Tutorial zur Installation und Bereitstellung von Nginx Linux

1. Einführung in Nginx Nginx ist ein Webserver, d...

So installieren Sie allgemeine Komponenten (MySQL, Redis) in Docker

Docker installiert MySQL Docker-Suche MySQL. Such...

Einführung in die Verwendung von Ankern (benannte Anker) in HTML-Webseiten

Die folgenden Informationen sind aus dem Internet ...

Docker Detaillierte Abbildungen

1. Einführung in Docker 1.1 Virtualisierung 1.1.1...

Detaillierte Erklärung zur Installation und Verwendung von Vue-Router

Inhaltsverzeichnis Installieren Grundlegende Konf...

Natives JavaScript zum Erzielen von Folieneffekten

Wenn wir eine Seite erstellen, insbesondere eine ...

Detaillierte Einführung in die JavaScript-Funktion

Durch Funktionen lassen sich beliebig viele Anwei...

Javascript zum Umschalten durch Klicken auf das Bild

Durch Klicken Bilder zu wechseln, ist im Leben ei...

Vue implementiert nahtloses Scrollen von Listen

In diesem Artikelbeispiel wird der spezifische Co...

So deinstallieren Sie MySQL 5.7 unter CentOS7

Überprüfen Sie, was in MySQL installiert ist grep...