Heim >Datenbank >MySQL-Tutorial >Fassen Sie die Fallstricke einer langsamen und zeitaufwändigen MySQL-Left-Join-Abfrage zusammen und klären Sie sie
Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL. Er stellt hauptsächlich die Fallstricke der langsamen und zeitraubenden Left-Join-Abfrage vor, einschließlich des EXPLAIN-Befehls zur Analyse der SELECT-Anweisung Hilfreich für alle.
Empfohlenes Lernen: MySQL-Video-Tutorial
Zwei Tabellen, eine ist Benutzertabelle a (der Primärschlüssel ist vom Typ int) und die andere ist benutzerspezifische Informationstabelle b (die Benutzertabellen-ID). Feld ist vom Typ Varchar).
Da wir Benutzer und Benutzerinformationen anzeigen möchten, müssen wir entsprechende Abfragen durchführen. Wir haben jedoch festgestellt, dass die Abfrage nach dem Linksbeitritt langsam ist und zu lange dauert. Die Benutzertabellendaten belaufen sich auf etwa 20.000.
ALL: Zeigt einen vollständigen Tabellenscan an. Diese Art von Abfrage ist eine der Abfragen mit der schlechtesten Leistung.
Im Allgemeinen sollten unsere Abfragen keine Abfragen vom Typ ALL enthalten Wenn die Datenmenge groß ist, ist dies eine große Katastrophe für die Leistung der Datenbank. Wenn es sich bei einer Abfrage um eine Abfrage vom Typ ALL handelt, kann dies durch Hinzufügen eines Index zum entsprechenden Feld vermieden werden . Neuer Index Weil die Discovery-Tabelle Das B-Feld wurde noch nicht indiziert.alter table a add index idx_mbrID (mbrID);Erklären Sie die Analyse noch einmal
und stellen Sie fest, dass sich der Typ in ref geändert hat. Basierend auf der Leistungsbeziehung verschiedener Typtypen (
ALL < index < range ~ index_merge < ref < eq_ref < const < system
) fühlt es sich nach dem Vergleich in Ordnung an, sodass die Abfrage ausgeführt wird.
3. Ändern Sie den Indexfeldtyp, um konsistent zu sein
Nachdem ich die Abfrage ausgeführt habe, habe ich mir die von meinem vorherigen Kollegen entworfene Tabelle genau angesehen und festgestellt, dass das Indextypfeld war inkonsistent, also habe ich es in varchar in int geändert und erneut abgefragt, um die Abfragegeschwindigkeit zu ermitteln.
Auch wenn die im Java-Code geschriebene Zeichenfolge in der Datenbank in int geändert wurde, kann der aktuelle Test normal verwendet werden
Zusammenfassung
Nachdem ich das Problem gelöst hatte, öffnete ich das Entwicklungshandbuch und stellte fest, dass die Indexspezifikation Erzwingt eindeutig, dass die Datentypen während Verknüpfungen konsistent sind. Das zugehörige Feld muss einen Index haben! ! !
Empfohlenes Lernen:MySQL-Video-Tutorial
Das obige ist der detaillierte Inhalt vonFassen Sie die Fallstricke einer langsamen und zeitaufwändigen MySQL-Left-Join-Abfrage zusammen und klären Sie sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!