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

JavaScript-Closures erklärt

Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...

Prinzip und Anwendung der MySQL-Master-Slave-Synchronisation

Inhaltsverzeichnis 1. Master-Slave-Synchronisatio...

Welche Schleife ist in JavaScript die schnellste?

Wenn wir wissen, welche For-Schleife oder welcher...

Detaillierte Erklärung der Lösung für verweigerte Berechtigungen in Linux

Zugriff verweigert: Der Grund hierfür ist: Es lie...

MySQL-Datumsfunktionen und Datumskonvertierungs- und -formatierungsfunktionen

MySQL ist eine kostenlose relationale Datenbank m...

CSS erstellt Tippboxen, Bubble-Boxen und Dreiecke

Manchmal benötigen unsere Seiten Eingabeaufforder...

So überprüfen Sie, ob der Grafiktreiber erfolgreich in Ubuntu installiert wurde

Führen Sie den Befehl aus: glxinfo | grep renderi...

Benutzerdefiniertes Auswahlfeld für die Webseite Auswählen

Jeder ist wahrscheinlich mit dem Auswahl-Dropdown...

Einige Fragen zu Hyperlinks

Ich freue mich sehr, an dieser Folge der Kartoffe...

Mehrere allgemeine Beispielcodes für Weiterleitungsverbindungen in HTML

Code kopieren Der Code lautet wie folgt: window.l...

Lösung zur Verwendung der Baidu-Freigabe auf der HTTPS-Seite

Seit der Aktivierung des https-Zugriffs für die g...

Beispielcode zur Realisierung des Ladeeffekts der B-Station mit CSS+SVG

Schwierigkeit Erstellung von zwei Masken für SVG-...