MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)

MySQL effiziente Abfrage Left Join und Gruppieren nach (plus Index)

MySQL effiziente Abfrage

MySQL verzichtet auf „Group By“, um die Geschwindigkeit des Left Join zu erhöhen (vorausgesetzt, es wird ein Index hinzugefügt).

Benutzertabelle: 100.000 Daten

Beispiel 1: Etwa 200 Sekunden

SELECT U.id, A.favorite_count FROM (SELECT-ID vom Benutzer) U
LINKS VERBINDEN (
  - Anzahl der Likes SELECT favorite_by AS user_id, SUM(favorite_count) AS favorite_count
  VON Favorit
  GRUPPE NACH Favorit_nach
) A ON U.id=A.Benutzer-ID
LINKS VERBINDEN (
  -- Anzahl der Kommentare SELECT user_id, COUNT(*) AS comment_count
  VON Fotokommentar
  GROUP BY Benutzer-ID
) B ON U.id=B.Benutzer-ID

Beispiel 2: Mehr als 1 Sekunde

Wählen Sie uf.user_id, uf.favorite_count, COUNT(pc.id) als comment_count aus (
wähle u.id als Benutzer-ID, SUM(f.favorite_count) als Favoritenanzahl aus (SELECT-ID vom Benutzer) u 
LEFT JOIN Favorit f auf f.favorite_by = u.id  
GROUP BY u.id
) 
LINKS BEITRETEN Fotokommentar PC auf pc.user_id = uf.user_id
GRUPPE NACH uf.user_id

Anhang: So verknüpfen Sie 3 Tabellen in MySQL effizient

Für die folgenden drei Tabellen Join-Anweisung

wählen * 
ab t1 
trete t2 bei (t1.a=t2.a) 
trete t3 bei (t2.b=t3.b) 
wobei t1.c>=X und t2.c>=Y und t3.c>=Z;

Wenn es als straight_join umgeschrieben wird, wie gibt man die Verbindungsreihenfolge an und wie erstellt man Indizes für die drei Tabellen?

Versuchen Sie, den BKA-Algorithmus zu verwenden

Bei Verwendung von BKA wird die Abfrage direkt verschachtelt, anstatt „zuerst das Ergebnis der Verknüpfung zweier Tabellen zu berechnen und dann die Verknüpfung mit der dritten Tabelle durchzuführen“. Spezifische Implementierung: Wählen Sie unter den drei Bedingungen t1.c>=X, t2.c>=Y und t3.c>=Z die Tabelle mit den wenigsten Daten nach dem Filtern als erste treibende Tabelle aus. An diesem Punkt können die folgenden zwei Situationen auftreten.

Wenn Tabelle t1 oder t3 ausgewählt ist, ist der Rest festgelegt:

  • Wenn die treibende Tabelle t1 ist, lautet die Verbindungsreihenfolge t1->t2->t3, und für das Feld der getriebenen Tabelle muss ein Index erstellt werden, d. h. es muss ein Index für t2.a und t3.b erstellt werden.
  • Wenn die treibende Tabelle t3 ist, ist die Verbindungsreihenfolge t3->t2->t1 und es müssen Indizes für t2.b und t1.a erstellt werden.

Gleichzeitig müssen wir auch einen Index für Feld c der ersten Treibertabelle erstellen.

Im zweiten Fall, wenn die erste ausgewählte treibende Tabelle die Tabelle t2 ist, müssen die Filtereffekte der anderen beiden Bedingungen ausgewertet werden.

Die Idee besteht darin, den Datensatz der an jedem Join beteiligten treibenden Tabelle so klein wie möglich zu halten, da dadurch unsere treibende Tabelle kleiner wird.

Zusammenfassen

Dies ist das Ende dieses Artikels über MySQL-effiziente Abfragen, Left Join und Group By. Weitere relevante Inhalte zu MySQL-effizienten Abfragen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Warum MySQL die Verwendung von Unterabfragen und Verknüpfungen nicht empfiehlt
  • MySQL-Join-Abfragesyntax und Beispiele
  • Grundlegende MySQL-Tabellenabfragen – häufige Fehler beim Left-Join
  • Zusammenfassung verschiedener gängiger Abfragebeispiele für Join-Tabellen in MySQL
  • Abfrageprozess und Optimierungsmethode der (JOIN/ORDER BY)-Anweisung in MySQL
  • Das Prinzip der MySQL-Joinabfrage

<<:  Der Interviewer fragte, wie man in CSS ein festes Seitenverhältnis erreicht

>>:  Tipps zum Erstellen zweidimensionaler Arrays in JavaScript

Artikel empfehlen

So installieren Sie OpenJDK in Docker und führen das JAR-Paket aus

Bild herunterladen Docker-Pull OpenJDK Erstellen ...

So verstehen Sie SELinux unter Linux

Inhaltsverzeichnis 1. Einführung in SELinux 2. Gr...

Dynamische SQL-Anweisungsanalyse in Mybatis

Dieser Artikel stellt hauptsächlich die dynamisch...

Detaillierte Erklärung des Workbench-Beispiels in MySQL

MySQL Workbench – Modellierungs- und Designtool 1...

js realisiert 3D-Soundeffekte durch audioContext

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

CocosCreator ScrollView-Optimierungsreihe: Frame-Laden

Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...

Zusammenfassung der MySQL-Sperrwissenspunkte

Das Konzept des Schlosses ①. Im wirklichen Leben ...

Einige Vorschläge zur Gewährleistung der MySQL-Datensicherheit

Daten sind das wichtigste Kapital eines Unternehm...

Detaillierte Erklärung der MySQL-Injektion ohne Kenntnis des Spaltennamens

Vorwort Ich habe in letzter Zeit das Gefühl, dass...

jQuery implementiert die Anzeige und Ausblendung von Anzeigenanimationen

Wir sehen oft, dass Anzeigen nach ein paar Sekund...

Docker führt Vorgänge mit dem angegebenen Speicher aus

wie folgt: -m, --memory Speicherlimit, das Format...

Ubuntu-Grundlagen-Tutorial: apt-get-Befehl

Vorwort Der Befehl apt-get ist ein Paketverwaltun...