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

Der Fallstrickrekord des Gummi-Rebound-Effekts der iOS WeChat H5-Seite

Geschäftliche Anforderungen Eines der Projekte, d...

js zur Implementierung einer Interferenz mit Verifizierungscodes (statisch)

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

Verwenden Sie reines JS, um den sekundären Menüeffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische JS...

Layout im Vue.js-Stil Allgemeine Fähigkeiten zur Flutter-Geschäftsentwicklung

Korrespondenz zwischen Flutter und CSS im Shadow-...

vsCode generiert Vue-Vorlagen mit einem Klick

1. Verwenden Sie die Tastenkombination Strg + Ums...

Schritte zur Installation von cuda10.1 unter Ubuntu 20.04 (grafisches Tutorial)

Vorbereitung vor der Installation Der Hauptzweck ...

Linux-Swap-Partition (ausführliche Erklärung)

Inhaltsverzeichnis linux 1. Was ist SWAP 2. Was p...

JavaScript zum Implementieren einer zufälligen Namensaufruf-Webseite

JavaScript schreibt eine zufällige Roll-Call-Webs...

Vue realisiert die Funktion zum Hochladen von Fotos auf den PC

In diesem Artikelbeispiel wird der spezifische Co...

Eine kurze Diskussion über die VUE Uni-App-Entwicklungsumgebung

Inhaltsverzeichnis 1. Über die visuelle Schnittst...