Heim  >  Artikel  >  Datenbank  >  ## MySQL-Mustervergleich: LIKE vs. LOCATE: Was ist schneller?

## MySQL-Mustervergleich: LIKE vs. LOCATE: Was ist schneller?

DDD
DDDOriginal
2024-10-25 07:51:29151Durchsuche

##  MySQL Pattern Matching: LIKE vs. LOCATE: Which is Faster?

Vergleich der Leistung von MySQL LIKE vs. LOCATE für den Mustervergleich

MySQL bietet zwei Hauptfunktionen zum Durchführen von Mustervergleichsvorgängen für Zeichenfolgen: LIKE und LOKALISIEREN. Obwohl beide ähnliche Zwecke erfüllen, weisen sie geringfügige Unterschiede in den Leistungsmerkmalen auf, die sich auf die Effizienz von Abfragen auswirken können.

Der LIKE-Operator verwendet ein Platzhalterzeichen (%), um Muster innerhalb einer Zeichenfolge abzugleichen. Zum Beispiel:

<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>

Die LOCATE-Funktion hingegen sucht nach dem ersten Vorkommen eines bestimmten Teilstrings innerhalb eines Strings und gibt dessen Position zurück. Ein Ergebnis ungleich Null weist auf eine Übereinstimmung hin:

<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>

Beim Vergleich der Leistung dieser beiden Funktionen wird im Allgemeinen beobachtet, dass der LIKE-Operator geringfügig schneller arbeitet als LOCATE. Dies liegt vor allem daran, dass LIKE keinen zusätzlichen Vergleich („> 0“) erfordert, um festzustellen, ob eine Übereinstimmung vorliegt.

Um diesen Unterschied zu veranschaulichen, betrachten wir die folgenden Benchmark-Ergebnisse:

<code class="shell">mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar'));
+---------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar')) |
+---------------------------------------------+
|                                           0 |
+---------------------------------------------+

mysql> SELECT BENCHMARK(100000000,LOCATE('foo','foobar') > 0);
+-------------------------------------------------+
| BENCHMARK(100000000,LOCATE('foo','foobar') > 0) |
+-------------------------------------------------+
|                                               0 |
+-------------------------------------------------+

mysql> SELECT BENCHMARK(100000000,'foobar' LIKE '%foo%');
+--------------------------------------------+
| BENCHMARK(100000000,'foobar' LIKE '%foo%') |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+</code>

In diesem Beispiel übertrifft LIKE geringfügig die Leistung von LOCATE und benötigt etwa 0,65 Sekunden weniger für die Ausführung von 100 Millionen Iterationen. Es ist jedoch wichtig zu beachten, dass die Leistungsunterschiede je nach Länge der Zeichenfolgen und des Musters variieren können gesucht wird, und die verwendete MySQL-Version.

Das obige ist der detaillierte Inhalt von## MySQL-Mustervergleich: LIKE vs. LOCATE: Was ist schneller?. 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