Heim  >  Artikel  >  Datenbank  >  Fassen Sie die Fallstricke einer langsamen und zeitaufwändigen MySQL-Left-Join-Abfrage zusammen und klären Sie sie

Fassen Sie die Fallstricke einer langsamen und zeitaufwändigen MySQL-Left-Join-Abfrage zusammen und klären Sie sie

WBOY
WBOYnach vorne
2022-10-04 08:00:272901Durchsuche

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.

Fassen Sie die Fallstricke einer langsamen und zeitaufwändigen MySQL-Left-Join-Abfrage zusammen und klären Sie sie

Empfohlenes Lernen: MySQL-Video-Tutorial

Problemhintergrund

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.

Problemanalyse und -verarbeitung

1. Der EXPLAIN-Befehl analysiert die SELECT-Anweisung. Das Typfeld bietet eine wichtige Grundlage für die Beurteilung, ob die Abfrage effizient ist ist ein vollständiger Tabellenscan oder Indexscan usw.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen