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

So optimieren Sie MySQL-Abfragen basierend auf dem EXPLAIN-Plan

Hängt davon ab, was Sie anstreben und was die Abfrage ist.

Im Allgemeinen für jede Zeile in EXPLAIN, die ein Using where hat , müssen Sie es mit einem Index (possible keys und keys Säule). Dies sind Ihre Filter und beinhalten WHERE und ON. Sagen Sie Using index ist noch besser. Es bedeutet, dass es einen abdeckenden Index gibt und MySQL die Daten direkt aus dem Index abrufen kann, anstatt die Zeile in den Tabellendaten zu besuchen.

Die Zeilen, in denen kein Using where steht , und es gibt eine große Anzahl von Zeilen zurück, die betrachtet werden sollten. Dies sind Rückgabewerte für alle Zeilen in der Tabelle. Ich weiß nicht, was Ihre Frage ist, also weiß ich nicht, ob ich hier alarmiert sein soll. Versuchen Sie, die Ergebnismenge zu filtern, um die Größe zu reduzieren und die Leistung zu verbessern.

Sie sollten im Allgemeinen versuchen, Using filesort zu vermeiden oder Using temporary , obwohl diese nur schlecht sind, wenn Sie sie nicht erwarten.

Filesort erscheint normalerweise mit der ORDER-Klausel. Generell möchten Sie, dass MySQL einen abdeckenden Index verwendet (Using index ), sodass die Zeilen bereits in der richtigen Reihenfolge vom Server zurückgegeben werden. Wenn sie es nicht sind, dann muss MySQL sie danach ordnen, indem sie filesort verwendet.

Using temporary kann schlecht sein, wenn es sich auf abgeleitete Tabellen bezieht, da sie keine Indizes haben. Es scheint, dass Sie explizit eine temporäre Tabelle mit Indizes erstellt haben, also ist es hier nicht schlecht. Manchmal besteht Ihre einzige Wahl darin, eine abgeleitete Tabelle zu verwenden, und daher Using temporary .