Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen

Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen

Sehen Sie sich die 100 höchsten Punktzahlen der Spielgeschichte an

SQL-Code

WÄHLEN Sie ps.* VON cdb_playsgame ps, WO ps.credits=(wählen Sie MAX(credits)  
VON cdb_playsgame ps1  
wobei ps.uid=ps1.uid UND ps.gametag=ps1.gametag) UND ps.gametag='yeti3'  
GROUP BY ps.uid, sortiert nach ps.credits, desc LIMIT 100;

SQL-Code

Wählen Sie ps.*  
VON cdb_playsgame ps,(wählen Sie ps1.uid, ps1.gametag, MAX(credits) als Credits 
VON cdb_playsgame ps1 gruppieren nach uid,gametag) t 
WO ps.credits=t.credits UND ps.uid=t.uid UND ps.gametag=t.gametag UND ps.gametag='yeti3'  
GROUP BY ps.uid, sortiert nach ps.credits, desc LIMIT 100;

Die Ausführungszeit beträgt nur 0,22 Sekunden und ist damit 10.000-mal schneller als die ursprünglichen 25 Sekunden.

Überprüfen Sie das beste Spielergebnis des Tages

SQL-Code

 SELECT ps. * , mf. * , m.Benutzername 
VON cdb_playsgame ps 
LEFT JOIN cdb_memberfields mf ON mf.uid = ps.uid 
LEFT JOIN cdb_members m ON m.uid = ps.uid 
WO ps.gametag = "chuansj" 
UND FROM_UNIXTIME(ps.dateline, '%Y%m%d') = '20081008' 
UND ps.credits = ( 
Wählen Sie MAX(ps1.credits) 
VON cdb_playsgame ps1 
WO ps.uid = ps1.uid 
UND ps1.gametag = "chuansj" 
UND FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '20081008') 
GRUPPE NACH ps.uid 
ORDER BY Credits DESC 
GRENZE 0 , 50

Wie in der Abfrage:

UND ps.credits=(SELECT MAX(ps1.credits)  
 VON {$tablepre}playsgame ps1, wobei ps.uid=ps1.uid UND ps1.gametag = '$game'  
 UND FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime' )

Besonders zeitaufwendig

Auch wie:

FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$heutezeit'

Eine solche Anweisung führt dazu, dass der Index ungültig wird, da der Wert jeder Datenzeile mithilfe der Funktion berechnet und wie folgt angepasst werden muss:

SQL-Code

UND ps1.dateline >= UNIX_TIMESTAMP('$todaytime')

//Nach der Änderung
SQL-Code

 SELECT ps. * , mf. * , m.Benutzername 
VON cdb_playsgame ps, cdb_memberfields mf, cdb_members m, ( 
 
SELECT ps1.uid, MAX( ps1.credits ) AS Credits 
VON cdb_playsgame ps1 
WO ps1.gametag = "chuansj" 
UND ps1.dateline >= UNIX_TIMESTAMP( '20081008' ) 
GRUPPE NACH ps1.uid 
) AS t 
WO mf.uid = ps.uid 
UND m.uid = ps.uid 
UND ps.gametag = "chuansj" 
UND ps.credits = t.credits 
UND ps.uid = t.uid 
GRUPPE NACH ps.uid 
ORDER BY Credits DESC 
GRENZE 0 , 50

Notieren Sie für jeden Spieler die Spielernummer, den Namen und die Anzahl der Geldstrafen, die er erhalten hat, jedoch nur für die Spieler, die mindestens zwei Geldstrafen erhalten haben.

Für eine kompaktere Abfrage platzieren Sie eine Unterabfrage in der FROM-Klausel.

SQL-Code

WÄHLEN SIE SPIELERNR., NAME, NUMMER 
VON (SPIELERNR.,NAME AUSWÄHLEN, 
       (ANZAHL AUSWÄHLEN(*) 
       VON STRAFEN 
       WO STRAFEN.SPIELERNR = 
          SPIELER.SPIELERNR) 
       ALS NUMMER 
    AB ZANGE) ALS PN 
WO ZAHL>=2

Die Unterabfrage in der FROM-Klausel ermittelt für jeden Spieler die Spielernummer, den Namen und die Strafnummer. Anschließend wird diese Zahl zu einer Spalte im Zwischenergebnis. Anschließend wird eine Bedingung angegeben (NUMBER>=2); abschließend werden die Spalten in der SELECT-Klausel abgerufen.

Zusammenfassen

Dies ist der gesamte Inhalt dieses Artikels zur Beispielanalyse von MySQL-Unterabfragen und verschachtelten Abfrageoptimierungen. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können sich hier informieren: Beispiele für Optimierungstechniken für die Effizienz langsamer Unterabfragen der MySQL IN-Anweisung, eine kurze Erörterung der Effizienz der Union und IN-Unterabfragen von MySQL usw. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht und der Herausgeber wird diese rechtzeitig beheben.

Vielen Dank, Freunde, für Ihre Unterstützung von 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Tutorial zu Spalten- und Zeilenunterabfrageoperationen in MySQL
  • Detaillierte Erklärung von Abfragebeispielen innerhalb von Unterabfragen in MySql
  • Unterabfragebeispiele in MySQL
  • Detaillierte Erläuterung von MySQL-Unterabfragen (verschachtelte Abfragen), Verknüpfungstabellen und kombinierten Abfragen
  • MySQL-Tutorial: Ausführliche Erklärung zum Unterabfragebeispiel

<<:  js realisiert 3D-Soundeffekte durch audioContext

>>:  Verwenden Sie die Befehle more, less und cat in Linux, um Dateiinhalte anzuzeigen

Artikel empfehlen

Vue3 realisiert den Bildlupeneffekt

In diesem Artikelbeispiel wird der spezifische Co...

CSS realisiert den Maskeneffekt, wenn die Maus über das Bild bewegt wird

1. Setzen Sie den HTML-Code der Maskenebene und d...

dh Filtersammlung

Der IE hat uns in der frühen Entwicklungsphase Ko...

Beispiele für die Verwendung des ES6-Spread-Operators

Inhaltsverzeichnis Was sind Spread- und Rest-Oper...

Detaillierte Schritte zur Installation von MySQL 8.0.18-winx64 unter Win10

1. Gehen Sie zunächst auf die offizielle Website,...

Was tun, wenn der von Docker Run gestartete Container hängt und Daten verliert?

Szenariobeschreibung In einem bestimmten System w...

Beispiel zum Entfernen eines JSON-Backslashs in PHP

1. Entfernen Sie Backslashes mit der Methode „str...

jQuery-Plugin zur Implementierung des Suchverlaufs

Jeden Tag ein jQuery-Plugin – um einen Suchverlau...

Entwerfen Sie eine einfache HTML-Anmeldeoberfläche im CSS-Stil

login.html-Teil: <!DOCTYPE html> <html l...

Einführung und Installation von MySQL Shell

Inhaltsverzeichnis 01 ReplicaSet-Architektur 02 E...

Der Unterschied zwischen HTML Empty Link href="#" und href="javascript:void(0)"

# enthält eine Standortinformation. Der Standardan...

Detaillierte Erklärung zum CSS-Randkollaps

Vorherige Das ist eine klassische alte Frage. Da ...