MySQL | REGEXP VS喜欢

时间:2013-05-20 09:43:23

标签: mysql regex database-performance

我的数据库中有一个表CANDIDATE,它在MySQL 5.5下运行,我试图从表中获取行包含在firstname中的行,所以我可以运行以下两个查询,但我想现在哪个查询我们应该在优化方面长期使用。

SELECT * FROM CANDIDATE c WHERE firstname REGEXP 'ram';
SELECT * FROM CANDIDATE c WHERE firstname LIKE'%ram%';

5 个答案:

答案 0 :(得分:9)

REGEXPLIKE用于完全不同的情况。

LIKE用于向字符串添加通配符,而REGEXP用于将属性与正则表达式匹配。

在您的情况下,firstname更有可能使用LIKE而不是REGEXP进行匹配,因此会更加优化。

答案 1 :(得分:5)

如果您可以使用LIKE而不是REGEXP,请使用LIKE

答案 2 :(得分:2)

MySQL 中的 LIKE 与 REGEXP

  • 单一条件:LIKE 更快
  • 多个条件:REGEXP 更快

示例

一个真实的例子可能是找到所有包含转义的 CRLF、LF 或 CR 回车的行。

单一条件

SELECT * FROM comments WHERE text LIKE '%\\\\n%'; ? Faster
SELECT * FROM comments WHERE text REGEXP '\\\\n'; ? Slower

多个条件

SELECT * FROM comments
WHERE text LIKE '%\\\\r\\\n%'
OR text LIKE '%\\\\n%'
OR text LIKE '%\\\\r%'; ? Slower

SELECT * FROM comments
WHERE text REGEXP '((\\\\r\\\\n)|(\\\\(n|r)))'; ? Faster

结论

对单条件查询使用 LIKE,对多条件查询使用 REGEXP

答案 3 :(得分:1)

如果您不确定值,请更好地使用LIKE查询而不是REGEXP。

LIKE也比REGEXP快得多。

答案 4 :(得分:0)

我已经在MySQL 8.0.13上进行了尝试,并比较了具有索引的列上具有1M +行的表上的LIKEREGEXP

SELECT * FROM table WHERE column LIKE '%foobar%';

查询耗时10.0418秒。

SELECT * FROM table WHERE REGEXP_LIKE(column, 'foobar');

查询耗时11.0742秒。

LIKE的性能更快。如果您可以不用它来代替REGEXP,请使用它。