Detaillierte Erklärung der Ausführungsunterschiede zwischen count(1), count(*) und count(Spaltenname)

Detaillierte Erklärung der Ausführungsunterschiede zwischen count(1), count(*) und count(Spaltenname)

Umsetzungseffekt:

1. count(1) und count(*)

Wenn die Datenmenge in der Tabelle groß ist, dauert die Verwendung von count(1) nach der Analyse der Tabelle länger als die Verwendung von count(*)!

Aus dem Ausführungsplan haben count(1) und count(*) dieselbe Wirkung. Nach der Analyse der Tabelle benötigt count(1) zwar weniger Zeit als count(*) (für Daten mit bis zu 10.000 Elementen), der Unterschied ist jedoch nicht groß.

Wenn count(1) ein gruppierter Index bzw. eine ID ist, dann ist count(1) definitiv schneller. Aber der Unterschied ist sehr gering.

Weil count(*) automatisch auf dieses Feld optimiert. Daher ist count(1) nicht erforderlich. Verwenden Sie count(*). SQL hilft Ihnen bei der Optimierung. Daher: Es gibt grundsätzlich keinen Unterschied zwischen count(1) und count(*)!

2. count(1) und count(Feld)

Der Hauptunterschied zwischen beiden ist

(1) count(1) zählt die Anzahl aller Datensätze in der Tabelle, einschließlich der Datensätze, deren Felder Null sind.

(2) count(field) zählt, wie oft das Feld in der Tabelle vorkommt. Dabei wird der Fall ignoriert, in dem das Feld null ist. Das heißt, Datensätze, deren Felder Null sind, werden nicht gezählt.

Der Unterschied zwischen count(*) und count(1) und count(Spaltenname)

Ausführungseffekt:

count(*) umfasst alle Spalten, was der Anzahl der Zeilen entspricht. Beim Zählen der Ergebnisse werden Spaltenwerte mit NULL-Werten nicht ignoriert.
count(1) umfasst das Ignorieren aller Spalten, die Verwendung von 1 zur Darstellung der Codezeile und das Nicht-Ignorieren von Spaltenwerten mit NULL-Werten beim Zählen der Ergebnisse.
count(Spaltenname) beinhaltet nur den Spaltennamen. Beim Zählen der Ergebnisse wird die Anzahl der leeren Spaltenwerte (leer bedeutet hier nicht eine leere Zeichenfolge oder 0, sondern null) ignoriert. Das heißt, wenn ein Feldwert NULL ist, wird er nicht gezählt.

Ausführungseffizienz:
Wenn der Spaltenname der Primärschlüssel ist, ist count(Spaltenname) schneller als count(1).
Wenn der Spaltenname nicht der Primärschlüssel ist, ist count(1) schneller als count(Spaltenname).
Wenn die Tabelle mehrere Spalten und keinen Primärschlüssel hat, ist count(1) effizienter als count(*).
Wenn ein Primärschlüssel vorhanden ist, ist die Ausführungseffizienz der Auswahlanzahl (Primärschlüssel) am besten
Wenn die Tabelle nur ein Feld hat, ist select count(*) optimal.

Beispielanalyse

mysql> Tabelle erstellen counttest(Name char(1), Alter char(2));
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

mysql> in Counttest-Werte einfügen
  -> ('a', '14'),('a', '15'), ('a', '15'), 
  -> ('b', NULL), ('b', '16'), 
  -> ('c', '17'),
  -> ('d', null), 
  ->('e', '');
Abfrage OK, 8 Zeilen betroffen (0,01 Sek.)
Datensätze: 8 Duplikate: 0 Warnungen: 0

mysql> wähle * aus Counttest;
+------+------+
| Name | Alter |
+------+------+
| ein | 14 |
| ein | 15 |
| ein | 15 |
| b | NULL |
| b | 16 |
| c | 17 |
| d | NULL |
| e | |
+------+------+
8 Zeilen im Satz (0,00 Sek.)

mysql> wähle Name, Anzahl(Name), Anzahl(1), Anzahl(*), Anzahl(Alter), Anzahl(eindeutig(Alter))
  -> von Counttest
  -> nach Namen gruppieren;
+------+----------+----------+----------+----------+------------+----------------------+
| Name | Anzahl(Name) | Anzahl(1) | Anzahl(*) | Anzahl(Alter) | Anzahl(distinct(Alter)) |
+------+----------+----------+----------+----------+------------+----------------------+
| ein | 3 | 3 | 3 | 3 | 2 |
| b | 2 | 2 | 2 | 1 | 1 |
| c | 1 | 1 | 1 | 1 | 1 |
| d | 1 | 1 | 1 | 0 | 0 |
| e | 1 | 1 | 1 | 1 | 1 |
+------+----------+----------+----------+----------+------------+----------------------+
5 Zeilen im Satz (0,00 Sek.)

Zusätzliche Referenz: http://blog.csdn.net/lihuarongaini/article/details/68485838

Damit ist dieser Artikel über die Unterschiede zwischen count(1), count(*) und count(Spaltenname) abgeschlossen. Weitere Informationen zu count(1), count(*) und count(Spaltenname) finden Sie in früheren Artikeln auf 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:
  • Der Unterschied und die Ausführungsmethode von select count() und select count(1)
  • Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL
  • Unterschiede und Ausführungsmethoden von Select count(*), Count(1) und Count(column)
  • Der Unterschied und die Ausführungsmethode von Select count(*) und Count(1) in SQL Server

<<:  So kapseln Sie Timerkomponenten in Vue3

>>:  Führen Sie die Schritte für die Trennung von Nginx-Proxy-Frontend und Backend mit demselben Domänennamen aus.

Artikel empfehlen

Detaillierte Erklärung zum Anpassen des Stils von CSS-Bildlaufleisten

Dieser Artikel stellt den CSS-Bildlaufleistensele...

Tutorial zur Verwendung von Webpack in JavaScript

Inhaltsverzeichnis 0. Was ist Webpack 1. Einsatz ...

Warum verwendet der MySQL-Datenbankindex den B+-Baum?

Bevor wir weiter analysieren, warum der MySQL-Dat...

Spezifische Verwendung des Node.js-Paketmanagers npm

Inhaltsverzeichnis Zweck npm init und package.jso...

Detaillierte Erklärung der Nodejs-Array-Warteschlange und der forEach-Anwendung

In diesem Artikel werden hauptsächlich die Proble...

Implementierung der Nginx-Arbeitsprozessschleife

Nach dem Start initialisiert der Worker-Prozess z...

Angular Cookie Lese- und Schreibvorgangscode

Lese- und Schreibvorgänge bei Angular Cookies, de...

Zusammenfassung gängiger Docker-Befehle (empfohlen)

1. Zusammenfassung: Im Allgemeinen können sie in ...

MySQL 8.0.18 verwendet Klon-Plugin, um die MGR-Implementierung neu zu erstellen

Angenommen, ein Knoten im Drei-Knoten-MGR ist abn...

So rufen Sie einen HTML-Code auf mehreren HTML-Seiten gemeinsam auf

Methode 1: Skriptmethode verwenden: Erstellen Sie...

Installieren Sie Python 3.6 unter Linux und vermeiden Sie Fallstricke

Installation von Python 3 1. Abhängige Umgebung i...