Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL

Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL

Vorwort

Mit der Funktion count werden die Datensätze in einer Tabelle oder einem Array gezählt. count(*) gibt die Anzahl der abgerufenen Zeilen zurück, unabhängig davon, ob diese NULL-Werte enthalten oder nicht. Ich habe das Gefühl, dass in letzter Zeit alle über den Unterschied in der Anzahl diskutieren, also werde ich es auch aufschreiben: Gerne können Sie eine Nachricht hinterlassen, um es zu diskutieren. Schauen wir uns ohne weiteres die ausführliche Einführung an.

1. Tabellenstruktur:

dba_jingjing@3306>[rds_test]>CREATE TABLE `test_count` (
 -> `c1` varchar(10) DEFAULT NULL,
 -> `c2` varchar(10) DEFAULT NULL,
 -> SCHLÜSSEL `idx_c1` (`c1`)
 ->) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Abfrage OK, 0 Zeilen betroffen (0,11 Sek.)

2. Testdaten einfügen:

dba_jingjing@3306>[rds_test]>in test_count-Werte (1,10) einfügen;
Abfrage OK, 1 Zeile betroffen (0,03 Sek.)

dba_jingjing@3306>[rds_test]>in test_count-Werte einfügen (abc, null);
FEHLER 1054 (42S22): Unbekannte Spalte „abc“ in „Feldliste“
dba_jingjing@3306>[rds_test]>in test_count-Werte einfügen('abc',null);
Abfrage OK, 1 Zeile betroffen (0,04 Sek.)

dba_jingjing@3306>[rds_test]>in test_count-Werte einfügen (null, null);
Abfrage OK, 1 Zeile betroffen (0,04 Sek.)

dba_jingjing@3306>[rds_test]>in test_count-Werte einfügen('368rhf8fj',null);
Abfrage OK, 1 Zeile betroffen (0,03 Sek.)

dba_jingjing@3306>[rds_test]>Wählen Sie * aus Test_Count aus.
+--------------+------+
| c1 | c2 |
+--------------+------+
| 1 | 10 |
| abc | NULL |
| NULL | NULL |
| 368rhf8fj | NULL |
+--------------+------+
4 Zeilen im Satz (0,00 Sek.)

prüfen:

dba_jingjing@3306>[rds_test]>Wählen Sie count(*) aus test_count aus;
+----------+
| Anzahl(*) |
+----------+
| 4 |
+----------+
1 Zeile im Satz (0,00 Sek.)
   ERKLÄREN: {
  "Abfrageblock": {
   "select_id": 1,
   "Nachricht": "Tabellen auswählen, die optimiert wurden"
  1 Zeile im Satz, 1 Warnung (0,00 Sek.)
dba_jingjing@3306>[rds_test]>Wählen Sie count(1) aus test_count aus.
+----------+
| Anzahl(1) |
+----------+
| 4 |
+----------+
1 Zeile im Satz (0,00 Sek.)
   ERKLÄREN: {
  "Abfrageblock": {
   "select_id": 1,
   "Nachricht": "Tabellen auswählen, die optimiert wurden"
  1 Zeile im Satz, 1 Warnung (0,00 Sek.)
dba_jingjing@3306>[rds_test]>Wählen Sie count(c1) aus test_count aus;
+-------------+
| Anzahl(c1) |
+-------------+
| 3 |
+-------------+
1 Zeile im Satz (0,00 Sek.)
   "Tisch": {
    "Tabellenname": "test1",
    "Zugriffstyp": "Index",
    "Schlüssel": "idx_c1",
    "verwendete Schlüsselteile": [
     "c1"
    ],
    "Schlüssellänge": "33",

Warum ist „key_length“: „33“ 33? Was ist ein sekundärer Index? Siehe nächsten Abschnitt

Es gibt keinen Unterschied zwischen count(*) und count(1), aber es gibt einen Unterschied zwischen count(col)

Der Ausführungsplan weist Besonderheiten auf: Es ist ersichtlich, dass er weder Indizes noch Tabellen abfragt. Manchmal wird eine wegoptimierte Auswahl von Tabellen angezeigt, bei der keine Tabellen abgefragt werden und die sehr schnell ist.

Extra zeigt manchmal „Select tables optimized away optimized“ (Tabellen auswählen, die wegoptimiert sind) an, was bedeutet, dass es nichts Besseres zu optimieren gibt.

Für Erläuterungen zu einfachen Zählabfragen (z. B. Erläuterung von select count(*) aus Personen) ist das zusätzliche
Der Abschnitt lautet „Wählen Sie Tabellen aus, die nicht optimiert sind.“
Dies liegt daran, dass MySQL das Ergebnis direkt aus dem Tabelleninneren lesen kann und daher die Auswahl nicht durchführen muss.

---MySQLs Bedeutung von „Select tables optimized away optimized“ ist nicht „nichts Besseres kann optimiert werden“. Der entscheidende Punkt in der offiziellen Erklärung ist:
MySQL kann das Ergebnis direkt lesen

Eine plausible Erklärung wäre also:

1 Die Daten befinden sich bereits im Speicher und können direkt gelesen werden;

2 Daten können als Ergebnis einer Berechnung betrachtet werden, beispielsweise als Wert einer Funktion oder eines Ausdrucks.

3 Sobald das Abfrageergebnis vom Optimierer „vorhergesagt“ wurde, kann das Ergebnis ohne Ausführung abgerufen werden, sodass „die Auswahl nicht ausgeführt werden muss“.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Dieser Artikel erklärt den Unterschied zwischen MySQL count(*), count(1) und count(col).

<<:  Linux-Debugging-Tools, die sich Entwickler und Betreiber unbedingt ansehen sollten [Empfohlen]

>>:  Lassen Sie uns darüber sprechen, was das URL-Objekt von JavaScript ist

Artikel empfehlen

Verwenden Sie das ab-Tool, um einen API-Stresstest auf dem Server durchzuführen

Inhaltsverzeichnis 1 Eine kurze Einführung in den...

Eine kurze Zusammenfassung meiner Erfahrungen beim Schreiben von HTML-Seiten

Es sind drei oder vier Monate vergangen, seit ich ...

Leitfaden zur effizienten Nutzung von MySQL-Indizes

Vorwort Ich glaube, die meisten Leute haben MySQL...

Einführung in die Vue-Grundlagen: Installation und Verwendung von Vuex

Inhaltsverzeichnis 1. Was ist vuex 2. Installatio...

Zusammenfassung der allgemeinen Bedienungskenntnisse der MySQL-Datenbank

Dieser Artikel fasst gängige Betriebstechniken fü...

Tipps und Vorsichtsmaßnahmen zur Verwendung des MySQL-Index

1. Die Rolle des Index In allgemeinen Anwendungss...

Schritte zum Upgrade von CentOS6 auf Glibc

Inhaltsverzeichnis Hintergrund Kompilieren Sie gl...

MySQL-Abfrage gibt an, dass das Feld keine Zahl und kein Komma SQL ist

Grundlegende SQL-Anweisungen MySQL-Abfrageanweisu...

CSS-Code zur Unterscheidung von IE8/IE9/IE10/IE11 Chrome Firefox

Das Debuggen der Website-Kompatibilität ist wirkl...

Kopieren von JS-Objekten (Deep Copy und Shallow Copy)

Inhaltsverzeichnis 1. Oberflächliche Kopie 1. Obj...