Detaillierte Analyse der MySQL-Optimierung von like und = Leistung

Detaillierte Analyse der MySQL-Optimierung von like und = Leistung

Einführung

Die meisten Leute, die schon einmal Datenbanken verwendet haben, kennen die Ähnlichkeiten und Unterschiede zwischen den Zeichen „like“ und „=“ in Bezug auf die Funktion. Lassen Sie mich sie hier kurz zusammenfassen:

1. Unterschiede: Like kann für Fuzzy-Abfragen verwendet werden, während '=' diese Funktion nicht unterstützt; fragen Sie wie im folgenden Beispiel die Daten in der Infotabelle ab, deren erster Buchstabe der Feld-ID 1 ist:

Wählen Sie * aus Informationen, wo die ID beispielsweise „1 %“ ist;

2. Ähnlichkeiten: Sowohl „like“ als auch „=“ können für eine präzise Suche verwendet werden.

Die folgenden Beispiele fragen beispielsweise alle die Ergebnisse der Infotabelle ab, bei denen die Feld-ID gleich „12345“ ist:

Wählen Sie * aus Informationen, wo die ID beispielsweise „12345“ ist;

Oben sind die Ähnlichkeiten und Unterschiede zwischen „like“ und „=“ in den zurückgegebenen Ergebnissen aufgeführt. Dann fragen neugierige Freunde vielleicht: Wie sieht es mit dem Hinrichtungsprozess aus? Ist der Ausführungsprozess von MySQL derselbe, unabhängig davon, ob er auf like oder '=' stößt?

Das stimmt, Dinge können nicht nur nach ihrem Aussehen beurteilt werden. Wenn Sie genau hinschauen, werden Sie feststellen, dass „like“ und das Gleichheitszeichen „=“ nicht so einfach sind. Im Folgenden werden wir den wirklichen Unterschied zwischen den beiden im Detail analysieren~~~

Text

Lassen Sie uns zunächst das Schlüsselwort „explain“ in MySQL einführen. „explain“ bedeutet Ausführungsplan, d. h. verwenden Sie diesen Befehl, um zu sehen, wie dieses SQL ausgeführt wird.
Die Verwendung ist auch sehr einfach, d. h. Erläuterung + SQL-Anweisung, zum Beispiel:

Erläutern Sie „Select * from info“, wo die ID beispielsweise „12345“ lautet.

Dann testen wir die Abfrage mit „erklären“ unter „like“ und „=“. Testen wir zunächst die indizierten Felder:

ERKLÄREN AUSWÄHLEN
 * 
AUS
 crms_kunde 
WO
 ID = "7cf79d7c8a3a4f94b5373b3ec392e32d";

Ersetzen wir nun "=" durch like und probieren es aus:

ERKLÄREN AUSWÄHLEN
 * 
AUS
 crms_kunde 
WO
 ID WIE '7cf79d7c8a3a4f94b5373b3ec392e32d';

Durch Vergleichen können Sie feststellen, dass die Daten im Typfeld und im Extrafeld der beiden zurückgegebenen Ergebnisse unterschiedlich sind. Warum sind sie unterschiedlich und was bedeuten sie?

Feld „Typ“

Das Typfeld ist ein optionaler Wert und die Werte werden von der niedrigsten zur höchsten Leistung wie folgt sortiert:

Typ veranschaulichen
SYSTEM System, Tabelle hat nur eine Zeile (= Systemtabelle). Dies ist ein Sonderfall des const-Jointyps.
KONT Konstanten. Die Tabelle hat höchstens eine übereinstimmende Zeile. Da es nur eine Zeile gibt, können die Spaltenwerte in dieser Zeile vom Rest des Optimierers als Konstanten betrachtet werden. Konstantentabellen sind schnell, da sie nur einmal gelesen werden.
EQ_REF Verwenden Sie bei der Suche den Primärschlüssel oder den eindeutigen Typ
Referenz Suchen Sie einen oder mehrere Werte nach Index
INDEX_MERGE Zusammenführen von Indizes zur Suche mit mehreren einspaltigen Indizes
REICHWEITE Durchsuchen des Indexspaltenbereichs
Index Vollständiger Indextabellenscan
ALLE Vollständiger Tabellenscan

Aus der Tabelle ist deutlich ersichtlich, dass const eine konstante Suche und RANGE eine Bereichssuche in der Indexspalte ist, sodass die Leistung deutlich widergespiegelt wird.

Was stellt also das Extra-Feld bei Verwendung einer Like-Abfrage dar? Was bedeutet „Wo verwenden“ im Extra-Feld?

Zusätzliches Feld

1. Das Feld „Extra“ ist auch eine sehr wichtige Spalte in der Explain-Ausgabe, die wichtige ergänzende Informationen zum Abfrageplan während des Abfrageausführungsprozesses des MySQL-Abfrageoptimierers darstellt.

2. Die Verwendung von „where“ im Extra-Feld bedeutet, dass der MySQL-Server filtert, nachdem die Speicher-Engine die Zeile abgerufen hat. Im Vergleich zur Verwendung von '=' gibt es daher einen weiteren Schritt im Suchvorgang.

Aus der obigen Zusammenfassung können wir offensichtlich schließen, dass bei der Verwendung von Indexfeldern für bedingte Abfragen die Leistung von „=“ schneller ist als die von „like“.

Glauben Sie, dass dies das Ende ist?

Es gibt jedoch keine

Einige Freunde fragen vielleicht: „Was ist mit nicht indizierten Feldern?“

Ja, testen wir weiterhin nicht indizierte Felder.

ERKLÄREN AUSWÄHLEN
 * 
AUS
 crms_kunde 
WO
 Kundenname = "Zhang Fei";
--------------------------------------------------
 
ERKLÄREN AUSWÄHLEN
 * 
AUS
 crms_kunde 
WO
 Kundenname LIKE 'Kundenname';

Lassen Sie uns die gleichen beiden Anweisungen mit Ausnahme von "=" und wie folgt ausführen:
"=":

wie:

Es ist ersichtlich, dass „like“ und „=“ identisch sind, wenn es sich um ein Nichtindexfeld handelt, und es keinen Unterschied in der Leistung gibt.

(Natürlich gibt es noch viele weitere Felder in „Explain“, und ich werde sie später einzeln erläutern.)

abschließend

Durch unsere unermüdlichen Bemühungen können wir zu dem Schluss kommen, dass die Leistung von like und "=" bei Abfragen unter Verwendung nicht indizierter Felder gleich ist. Bei Verwendung indizierter Felder hat "=" eine bessere Leistung als like, da "=" direkt auf den Index trifft und nur einmal gelesen wird, während like eine Bereichsabfrage erfordert. ~~~~

Dies ist das Ende dieses Artikels über die MySQL-Optimierung der Leistung von like und =. Weitere relevante MySQL-Inhalte zur Leistung von like und = finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierung einer Fuzzy-Abfrage wie %% in MySQL
  • Tutorial zur Verwendung der LIKE-Klausel in MySQL
  • Tabellenreplikation in MySQL: Tabelle wie folgt erstellen und Tabelle als Auswahl erstellen
  • Zusammenfassung der MySQL-Fuzzy-Abfragen „Like“ und „Regexp“
  • Erklärung des Konzepts und der Verwendung von Like in MySQL

<<:  Verwendung des Linux-Befehls ipcs

>>:  Details zum Schreiben von React in einem Vue-Projekt

Artikel empfehlen

Optimale Webseitenbreite und ihre kompatible Implementierungsmethode

1. Beim Entwerfen einer Webseite ist das Bestimmen...

Detaillierte Erklärung des TS-Objekt-Spread-Operators und des Rest-Operators

Inhaltsverzeichnis Überblick Objektrestattribut E...

Detailliertes Tutorial zum Bereitstellen von Springboot oder Nginx mit Kubernetes

1 Einleitung Nachdem „Maven Springboot mit einem ...

Reacts Methode zur Realisierung einer sekundären Verknüpfung

In diesem Artikel wird der spezifische Code von R...

Warum sollten MySQL-Felder NOT NULL verwenden?

Ich habe vor Kurzem in einer neuen Firma angefang...

Detailliertes Tutorial zur Installation von Centos8 auf VMware

Offizielle Website-Adresse von CentOS https://www...

Element-Beispielcode zum Implementieren dynamischer Tabellen

Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...

Eine kurze Analyse der startReactApplication-Methode von React Native

In diesem Artikel haben wir den Startvorgang von ...

Verwenden Sie Docker, um ein Git-Image mithilfe des Klon-Repositorys zu erstellen

Überblick Ich verwende Docker seit über einem Jah...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...

CocosCreator ScrollView-Optimierungsreihe: Frame-Laden

Inhaltsverzeichnis 1. Einleitung 2. Analyse des f...