使用REGEXP,MySQL不需要的结果

时间:2017-11-07 21:19:20

标签: mysql regex

我对REGEX并不擅长,有人可以帮我优化我的MySQL查询吗?

SELECT activity
FROM activity
WHERE (LOWER( activity_name ) REGEXP '>mit|mit,|edited mit')
ORDER BY created_date DESC

当我将'>mit|mit,|edited mit'替换为'mit|mit,|edited mit'时,它的工作速度非常快,但会显示不需要的其他记录。我甚至试过'/[>]/mit|mit,|edited mit',不幸的是,我得错了结果。

谢谢

1 个答案:

答案 0 :(得分:0)

第二次正则表达式速度爆发的原因可能是第一次测试已经缓存了一些事情。你试过两次regexps吗?

这应该会好一点:

WHERE activity_name LIKE '%mit%'
  AND LOWER( activity_name ) REGEXP '>mit|mit,|edited mit'

LIKEREGEXP快,但效果不是很强。因此,LIKE会过滤掉大多数行,然后REGEXP将完成过滤。

另一个轻微的加速:如果activity_name进行了..._ci整理,则您不需要LOWER()

更快的是拥有FULLTEXT索引并执行

WHERE MATCH(activity_name) AGAINST('+mit' IN BOOLEAN MODE)
  AND REGEXP '>mit|mit,|edited mit'