MySQL | REGEXP VS喜欢

Var*_*pta 24 regex mysql database-performance

我在我的数据库中有一个表CANDIDATE在MySQL 5.5下运行,我试图从第一个名称中包含RAM的表中获取行,所以我可以运行以下两个查询,但我想现在我们应该使用哪个查询关于优化的长期.

SELECT * FROM CANDIDATE c WHERE firstname REGEXP 'ram';
SELECT * FROM CANDIDATE c WHERE firstname LIKE'%ram%';
Run Code Online (Sandbox Code Playgroud)

Isa*_*uge 19

MySQL 中的 LIKE 与 REGEXP

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

例子

现实世界的示例可能是:查找包含转义回车符 CRLF、LF 或 CR 的所有行。

单一条件

SELECT * FROM comments WHERE text LIKE '%\\\\n%';  Faster
SELECT * FROM comments WHERE text REGEXP '\\\\n';  Slower
Run Code Online (Sandbox Code Playgroud)

多种条件

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
Run Code Online (Sandbox Code Playgroud)

结论

用于LIKE单条件查询和REGEXP多条件查询。


dra*_*eus 10

REGEXPLIKE习惯于完全不同的情况.

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

在你的情况下,firstname更容易使用匹配LIKEREGEXP,因此,它会更加优化.


Joe*_*gan 9

我已经尝试过并在带有索引的列上有 1M+ 行的表上MySQL 8.0.13进行了LIKE对比REGEXP

SELECT * FROM table WHERE column LIKE '%foobar%';
Run Code Online (Sandbox Code Playgroud)

查询耗时 10.0418 秒。

SELECT * FROM table WHERE REGEXP_LIKE(column, 'foobar');
Run Code Online (Sandbox Code Playgroud)

查询耗时 11.0742 秒。

LIKE性能更快。如果您可以使用它而不是REGEXP,那就去做吧。


Cas*_*yte 7

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