Welche ist schneller: MySQL LIKE vs. LOCATE?
In MySQL gibt es zwei häufig verwendete Funktionen für den Mustervergleich in Strings: LIKE und LOKALISIEREN. Obwohl beide Funktionen zur Suche nach Teilzeichenfolgen innerhalb einer Zeichenfolge verwendet werden können, unterscheiden sie sich in ihrem Ansatz und ihren Leistungsmerkmalen.
LIKE vs. LOCATE
Der LIKE-Operator verwendet Platzhalter, um Übereinstimmungsmuster von Zeichen. Es unterstützt verschiedene Platzhalterzeichen, einschließlich % (entspricht einer beliebigen Anzahl von Zeichen) und _ (entspricht einem einzelnen Zeichen). Zum Beispiel:
<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>
Diese Abfrage sucht nach allen Zeilen, in denen der Spaltenwert irgendwo darin die Zeichenfolge „text“ enthält.
Andererseits sucht die LOCATE-Funktion nach der Position eines angegebenen Teilstrings innerhalb eines Strings. Es gibt den Index des ersten Vorkommens der Teilzeichenfolge zurück oder 0, wenn die Teilzeichenfolge nicht gefunden wird. Beispiel:
<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>
Diese Abfrage sucht nach allen Zeilen, in denen der Spaltenwert irgendwo darin die Teilzeichenfolge „text“ enthält.
Leistungsvergleich
Im Allgemeinen ist der LIKE-Operator geringfügig schneller als LOCATE. Dies liegt daran, dass LIKE keinen zusätzlichen Vergleich durchführen muss, um zu prüfen, ob das Ergebnis größer als 0 ist.
Um diesen Leistungsunterschied zu demonstrieren, berücksichtigen Sie die folgenden Benchmarks:
<code class="sql">mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar')); +---------------------------------------------+ | BENCHMARK(100000000,LOCATE('foo','foobar')) | +---------------------------------------------+ | 0 | +---------------------------------------------+ 1 row in set (3.24 sec) mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0); +-------------------------------------------------+ | BENCHMARK(100000000,LOCATE('foo','foobar') > 0) | +-------------------------------------------------+ | 0 | +-------------------------------------------------+ 1 row in set (4.63 sec) mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%'); +--------------------------------------------+ | BENCHMARK(100000000,'foobar' LIKE '%foo%') | +--------------------------------------------+ | 0 | +--------------------------------------------+ 1 row in set (4.28 sec)</code>
As Die Benchmark-Ergebnisse zeigen, dass LIKE bei der Suche nach einem Teilstring innerhalb eines Strings geringfügig schneller ist als LOCATE. Allerdings ist der Leistungsunterschied für die meisten praktischen Anwendungsfälle relativ gering.
Das obige ist der detaillierte Inhalt von## Was ist in MySQL schneller: „LIKE' oder „LOCATE' für den String-Abgleich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!