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

Zukunftsweisendes Allround-Webdesign: Progressive Enhancement

<br />Original: Progressive Enhancement vers...

Die Verknüpfungsmethode zwischen Menü und Registerkarte von vue+iview

Vue+iview-Menü und Tab-Verknüpfung Ich entwickle ...

So verwenden Sie den Fuser-Befehl im Linux-System

Was ist Fuser Command? Der Befehl fuser ist ein s...

Reines CSS zum Hinzufügen von Stil zur ausgewählten Implementierung (kein Skript)

Ändern Sie den Standardstil der Auswahl, normalerw...

So verwenden Sie js zur Kommunikation zwischen zwei HTML-Fenstern

Szenario: Wenn Seite A Seite B öffnet, muss Seite...

Lösung zur Installation von OpenCV 3.2.0 in Ubuntu 18.04

Laden Sie opencv.zip herunter Installieren Sie di...

js zur Implementierung eines Web-Rechners

Wie erstelle ich mit HTML, CSS und JS einen einfa...

js, um den Popup-Effekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

Was bedeuten CN2, GIA, CIA, BGP und IPLC?

Was ist die CN2-Linie? CN2 steht für China Teleco...

JavaScript implementiert Tab-Leisten-Umschalteffekte

Hier ist ein Fall, den Frontend-Entwickler kennen...

Beispielcode zur Implementierung eines 3D-Rotationseffekts mit reinem CSS

Verwenden Sie hauptsächlich die Eigenschaften „pr...