## MySQL 中字串符合的「LIKE」和「LOCATE」哪個比較快?

Patricia Arquette
發布: 2024-10-25 02:36:30
原創
609 人瀏覽過

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

MySQL LIKE 和 LOCATE 哪個比較快?

在 MySQL 中,有兩個常用的字串模式匹配函數: 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!