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

Grundkenntnisse zu MySQL – Lernhinweise

Datenbank anzeigen show databases; Erstellen eine...

Linux-Plattform MySQL ermöglicht Remote-Login

Während des Entwicklungsprozesses stoße ich häufi...

Detaillierte Schritte zum Löschen von Umgebungsvariablen in Linux

Wie lösche ich Umgebungsvariablen unter Linux? Ve...

Javascript um den Drag-Effekt der Login-Box zu erreichen

In diesem Artikel wird der spezifische Code von J...

Docker stop stoppt/remove löscht alle Container

In diesem Artikel wird hauptsächlich das Stoppen/...

Eine SQL-Anweisung schließt die MySQL-Deduplizierung ab und behält eine

Als ich vor einigen Tagen an einer Anforderung ar...

Karusselleffekte mit JavaScript implementieren

In diesem Artikel wird der spezifische Code für J...

Verschiedene Möglichkeiten zum Ändern der Hintergrundbildfarbe mit CSS3

CSS3 kann die Farbe von Bildern ändern. Ab sofort...

So fügen Sie Spalten in einer MySQL-Datenbank hinzu, löschen und ändern sie

Dieser Artikel beschreibt anhand eines Beispiels,...

Mit JS ein kleines Flugzeugkriegsspiel implementieren

In diesem Artikelbeispiel wird der spezifische JS...

Ubuntu 20.04: Beispiel zum Ändern der IP-Adresse

veranschaulichen: Als ich heute das letzte Experi...

So konfigurieren Sie Nginx zur Unterstützung von IPv6 unter Linux

1. Überprüfen Sie, ob das vorhandene Nginx IPv6 u...