MySQL LIKE と LOCATE のどちらが速いですか?
MySQL では、文字列のパターン マッチングによく使用される関数が 2 つあります。 LIKEそして位置を特定します。どちらの関数も文字列内の部分文字列の検索に使用できますが、アプローチとパフォーマンス特性が異なります。
LIKE と LOCATE
LIKE 演算子はワイルドカードを使用して、文字のパターンを一致させます。 % (任意の数の文字と一致) や _ (単一の文字と一致) を含む、さまざまなワイルドカード文字がサポートされます。例:
<code class="sql">SELECT * FROM table WHERE column LIKE '%text%';</code>
このクエリは、列値のどこかに文字列「text」が含まれるすべての行を検索します。
一方、LOCATE 関数は位置を検索します。文字列内の指定された部分文字列の。部分文字列が最初に出現したインデックスを返します。部分文字列が見つからない場合は 0 を返します。例:
<code class="sql">SELECT * FROM table WHERE LOCATE('text', column) > 0;</code>
このクエリは、列値のどこかに部分文字列「text」が含まれるすべての行を検索します。
パフォーマンスの比較
一般に、LIKE 演算子は LOCATE よりもわずかに高速です。これは、LIKE では、結果が 0 より大きいかどうかを確認するために追加の比較を実行する必要がないためです。
このパフォーマンスの違いを実証するには、次のベンチマークを考慮してください。
<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>
ベンチマーク結果によると、文字列内の部分文字列を検索する場合、LIKE は LOCATE よりわずかに高速です。ただし、ほとんどの実際の使用例では、パフォーマンスの違いは比較的小さいです。
以上が## MySQL では文字列のマッチングに「LIKE」と「LOCATE」のどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。