我的数据库中有一个名为CANDIDATE的表,运行在MySQL 5.5下。我正在尝试从表中获取那些RAM包含在firstname中的行,因此我可以运行以下两个查询,但我想知道哪个查询应该长期使用以便于优化。
SELECT * FROM CANDIDATE c WHERE firstname REGEXP 'ram';
SELECT * FROM CANDIDATE c WHERE firstname LIKE'%ram%';
我的数据库中有一个名为CANDIDATE的表,运行在MySQL 5.5下。我正在尝试从表中获取那些RAM包含在firstname中的行,因此我可以运行以下两个查询,但我想知道哪个查询应该长期使用以便于优化。
SELECT * FROM CANDIDATE c WHERE firstname REGEXP 'ram';
SELECT * FROM CANDIDATE c WHERE firstname LIKE'%ram%';
一个实际例子是:查找包含转义回车换行符(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
。
我已经在MySQL 8.0.13
上尝试过,并在一个具有100万行+和带有索引的列的表上比较了LIKE
和REGEXP
SELECT * FROM table WHERE column LIKE '%foobar%';
查询用时10.0418秒。
SELECT * FROM table WHERE REGEXP_LIKE(column, 'foobar');
查询用时11.0742秒。
LIKE
的性能更快。如果可以使用它替代REGEXP
,就使用它。
REGEXP
和 LIKE
的使用场景完全不同。
LIKE
用于在字符串中添加通配符,而 REGEXP
用于使用正则表达式匹配属性。
在您的情况下,使用 LIKE
更有可能匹配 firstname
,因此它会更加优化。
如果您不确定值,最好使用LIKE查询而不是REGEXP。
此外,LIKE比REGEXP快得多。