我对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'
,不幸的是,我得错了结果。
谢谢
答案 0 :(得分:0)
第二次正则表达式速度爆发的原因可能是第一次测试已经缓存了一些事情。你试过两次regexps吗?
这应该会好一点:
WHERE activity_name LIKE '%mit%'
AND LOWER( activity_name ) REGEXP '>mit|mit,|edited mit'
LIKE
比REGEXP
快,但效果不是很强。因此,LIKE
会过滤掉大多数行,然后REGEXP
将完成过滤。
另一个轻微的加速:如果activity_name
进行了..._ci
整理,则您不需要LOWER()
。
更快的是拥有FULLTEXT
索引并执行
WHERE MATCH(activity_name) AGAINST('+mit' IN BOOLEAN MODE)
AND REGEXP '>mit|mit,|edited mit'