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

Praxis der Linux-Datei- und Benutzerverwaltung

1. Zeigen Sie die Dateien oder Verzeichnisse im V...

Implementierung der Nginx-Konfiguration https

Inhaltsverzeichnis 1: Bereiten Sie das https-Zert...

Lernen Sie, wie Sie in 6 Sekunden 1 Million Datensätze in MySQL einfügen

1. Idee Es dauerte nur 6 Sekunden, um 1.000.000 D...

Beispiel einer datenbankübergreifenden Abfrage in MySQL

Vorwort In MySQL werden datenbankübergreifende Ab...

JavaScript-Implementierung eines einfachen Additionsrechners

In diesem Artikelbeispiel wird der spezifische Ja...

Implementierung des Deployment-War-Package-Projekts mit Docker

Um War mit Docker bereitzustellen, müssen Sie ein...

Webdesign muss auch zunächst eine umfassende Bildpositionierung der Website haben

⑴ Der Inhalt bestimmt die Form. Reichern Sie zuers...

So erstellen Sie mit Dockerfile ein Spiegelbild der Java-Laufzeitumgebung

Die aktuelle Umgebung ist: Centos 7.5 docker-ce 1...

Beispiel-Tutorial zur JavaScript-Typerkennungsmethode

Vorwort JavaScript ist eine der am häufigsten ver...