Detaillierte Erklärung zur korrekten Verwendung der if-Funktion in MySQL

Detaillierte Erklärung zur korrekten Verwendung der if-Funktion in MySQL

Für das, was ich heute schreiben werde, lief das Programm fast 7 Stunden und speicherte 10 Millionen Datensätze in der Datenbank. ——

Worüber ich heute sprechen möchte, ist ein Beispiel der IF()-Funktion der MySQL-Datenbank.

Die konkreten Szenarien sind wie folgt:

Schauen wir uns zunächst die Tabellenstruktur an:

CREATE TABLE `Nachricht` (
 `id` varchar(30) NICHT NULL,
 `Titel` varchar(30) DEFAULT NULL,
 `Inhalts`-Text,
 `send_time` Datum/Uhrzeit DEFAULT NULL,
 `Typ` int(1) DEFAULT NULL COMMENT '1: Systembenachrichtigung, 2: Beschwerdevorschlag',
 `status` int(1) DEFAULT NULL COMMENT '0: wartet auf Senden, 1: Erfolg, 2: Fehler',
 PRIMÄRSCHLÜSSEL (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Die konkreten Anforderungen bestehen darin, jeweils die Gesamtzahl sowie die erfolgreiche und fehlgeschlagene Anzahl der Systembenachrichtigungen und Beschwerdevorschläge zu zählen.

Wenn wir auf ein solches Problem stoßen, besteht unsere allgemeine Idee darin, durch Typgruppierung die Gesamtzahl der Systembenachrichtigungen, Beschwerden und Vorschläge abzufragen und dann zwei Unterabfragen zu verwenden, um die Anzahl der erfolgreichen und fehlgeschlagenen Elemente zu zählen. Das SQL lautet wie folgt:

WÄHLEN
 COUNT(1) insgesamt,
 m.Typ,
 (WÄHLEN
   ANZAHL(1)
  VON Nachricht ms
  WO ms.status = 1
    UND m.type = ms.type) Erfolgssumme,
 (WÄHLEN
   ANZAHL(1)
  Von Nachricht mf
  WO mf.status = 1
    UND m.Typ = mf.Typ) failtotal
VON Nachricht m
GROUP BY m.Typ

Werfen wir einen Blick auf die Laufzeit. Das Zählen von 10 Millionen Daten dauert etwa 6 Minuten und 18 Sekunden .

Gibt es also eine einfachere und schnellere Möglichkeit zum Zählen? Natürlich gibt es die, und das ist die if()-Funktion, über die wir heute hauptsächlich sprechen.

Grundlegende Syntax

IF(expr1, expr2, expr3) gibt den Wert von expr2 zurück, wenn der Wert von expr1 wahr ist, und gibt den Wert von expr3 zurück, wenn der Wert von expr1 falsch ist. Es ist ein einfacher ternärer Ausdruck.

Vorgehensweise

Lassen Sie uns über die Idee sprechen. Wenn wir die Anzahl der erfolgreichen Ergebnisse zählen, können wir if(status=1,1,0) wie folgt schreiben. Wenn status==1, gibt es 1 zurück, andernfalls 0. Anschließend können wir die Anzahl der erfolgreichen Ergebnisse mit der Funktion SUM() addieren.

Durchführung

Die SQL-Anweisung lautet wie folgt:

WÄHLEN
 COUNT(1) insgesamt,
 m.Typ,
 SUMME(WENN(m.status = 1,1,0)) Erfolgssumme,
 SUMME(WENN(m.status != 1,1,0)) failtotal
VON Nachricht m
GRUPPE NACH m.Typ;

Sieht das nicht viel einfacher aus als die obige Unterabfrage? Werfen wir einen Blick auf die Laufzeit, die nur 1 Minute und 30 Sekunden beträgt. Ist das nicht viel schneller?

Und, hast du es heute gelernt?

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Zusammenfassung der Wissenspunkte im Zusammenhang mit Null (IFNULL, COALESCE und NULLIF) in MySQL
  • Zusammenfassung der Tipps zur Verwendung von coalesce() in MySQL
  • Detaillierte Erklärung der Funktionen IFNULL() und COALESCE() zum Ersetzen von Null in MySQL
  • Detaillierte Erklärung und Beispiele zur SQL Server COALESCE-Funktion
  • Eine kurze Analyse des Leistungsvergleichs zwischen den Paging-Modi ISNULL und COALESCE in SQL Server
  • MySQL-Zeitdifferenzfunktionen (TIMESTAMPDIFF, DATEDIFF), Funktionen zur Berechnung von Datumsumrechnungen (date_add, day, date_format, str_to_date)
  • MySQL verwendet benutzerdefinierte Funktionen, um die übergeordnete ID oder untergeordnete ID rekursiv abzufragen
  • Codebeispiel für die Verwendung der MySql COALESCE-Funktion

<<:  Detaillierte Erläuterung der Nginx-Konfigurationsparameter auf Chinesisch (Lastausgleich und Reverse-Proxy)

>>:  Wie erhält das WeChat Mini-Programm gleichzeitig Benutzerinformationen und Benutzertelefonnummern?

Artikel empfehlen

Der visuelle Designpfad der Website sollte den Benutzergewohnheiten entsprechen

Cooper sprach über den visuellen Pfad des Benutze...

MySQL Series 11-Protokollierung

Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte...

Freundliche Alternativen zum Find Tool in Linux

Mit dem Befehl „Find“ können Sie in einem angegeb...

XHTML-Tutorial: XHTML-Grundlagen für Anfänger

<br />Der Inhalt dieser Site ist Original. B...

So stellen Sie ein SpringBoot-Projekt mit Docker bereit

Die Entwicklung der Docker-Technologie bietet ein...

Beispiel für eine automatische Importmethode für allgemeine Vue3.0-Komponenten

1. Voraussetzungen Wir verwenden zum Importieren ...

Native JavaScript-Karussell-Implementierungsmethode

In diesem Artikel wird die Implementierungsmethod...

Detaillierte Erklärung der Funktionen jedes Ports von Tomcat

Aus der Tomcat-Konfigurationsdatei können wir ers...

Wie erreicht MySQL die Parallelität mehrerer Versionen?

Inhaltsverzeichnis MySQL-Mehrversionen-Parallelit...

So zeichnen Sie eine Mindmap in einem Miniprogramm

Inhaltsverzeichnis Was ist eine Mindmap? Wie zeic...