Heim  >  Artikel  >  Datenbank  >  ## Was ist in MySQL schneller: „LIKE“ oder „LOCATE“ für den String-Abgleich?

## Was ist in MySQL schneller: „LIKE“ oder „LOCATE“ für den String-Abgleich?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 02:36:30610Durchsuche

## Which is Faster in MySQL: `LIKE` or `LOCATE` for String Matching?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn