首页  >  文章  >  数据库  >  ## MySQL 中字符串匹配的“LIKE”和“LOCATE”哪个更快?

## MySQL 中字符串匹配的“LIKE”和“LOCATE”哪个更快?

Patricia Arquette
Patricia Arquette原创
2024-10-25 02:36:30610浏览

## 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn