ホームページ  >  記事  >  データベース  >  ## MySQL パターン マッチング: LIKE と LOCATE: どちらが速いですか?

## MySQL パターン マッチング: LIKE と LOCATE: どちらが速いですか?

DDD
DDDオリジナル
2024-10-25 07:51:29151ブラウズ

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

パターン マッチングにおける MySQL LIKE と LOCATE のパフォーマンスの比較

MySQL には、文字列に対してパターン マッチング操作を実行するための 2 つの主要な関数、LIKE と LOCATE が用意されています。探します。どちらも同様の目的を果たしますが、パフォーマンス特性に微妙な違いがあり、クエリの効率に影響を与える可能性があります。

LIKE 演算子は、ワイルドカード文字 (%) を使用して文字列内のパターンを照合します。例:

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

一方、LOCATE 関数は、文字列内で最初に出現した特定の部分文字列を検索し、その位置を返します。ゼロ以外の結果は一致を示します:

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

これら 2 つの関数のパフォーマンスを比較すると、一般に、LIKE 演算子の方が LOCATE よりわずかに高速に実行されることが観察されます。これは主に、LIKE が一致が存在するかどうかを判断するために追加の比較 ('> 0") を必要としないという事実によるものです。

この違いを説明するために、次のベンチマーク結果を考えてみましょう。

<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>

この例では、LIKE は LOCATE よりわずかに優れており、1 億回の反復の実行にかかる時間は約 0.65 秒短くなります。ただし、パフォーマンスの違いは文字列の長さやパターンによって異なる可能性があることに注意することが重要です。検索されているものと、使用されている MySQL のバージョン。

以上が## MySQL パターン マッチング: LIKE と LOCATE: どちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。