Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einfache MySQL-Unterabfrageleistung

In der ersten Abfrage sollte mysql eine Teilmenge von mdl_enrol auswählen Tabelle und vollständig mdl_user_enrolments und mdl_userdata in die Erinnerung. Sie wählen also viele Daten im Speicher aus. Nachdem Sie das getan haben, verbinden Sie die Daten. Wenn nicht genügend Speicherplatz vorhanden ist, um alle Daten zu speichern, bis sie zusammengeführt und an den Client zurückgesendet werden, wird eine temporäre Tabelle auf der Festplatte erstellt. Höchstwahrscheinlich ist der mysql-Optimierer nicht cool genug, um Ihren Fehler zu beheben und zu versuchen, den Ausführungsplan zu verbessern. Deshalb ist es langsam.

Während mysql für die zweite Abfrage genau weiß, was es auswählen muss, und nur die kleine Menge der erforderlichen Daten auswählt. In diesem Szenario ist es möglich, Indizes zu verwenden (vorausgesetzt, alle erforderlichen Indizes wurden erstellt). Es ist also schnell.