【发布时间】:2018-04-20 10:13:13
【问题描述】:
我不擅长 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',不幸的是,我得到了错误的结果。
谢谢
【问题讨论】:
-
>mit|mit,|edited mit应该是^mit|mit,|edited mit? -
或者:
^(mit|mit,|edited mit)。如果您能解释一下您想要匹配的内容、获得的结果以及不想要的结果,将会很有帮助。 -
不,我写对了,那些是href链接。所以我匹配右尖括号和链接首字母。不过还是谢谢。
-
坦率地说,您的模式非常理想。如果您删除第一个
>,则会出现两个在同一位置匹配的替代方案,这通常会降低性能。您可能想要的是减少替代品的数量,或者完全摆脱它们。如果您尝试过'mit|mit,|edited mit',那么将其写为'mit,?|edited mit'是有意义的,这意味着您可以将其缩减为'(edited )?mit'。也许只是LIKE '%mit%'就足够了吗? -
@Mitul
REGEXP '^<[[:alnum:]]+>[[:blank:]]+[[:alnum:]]+$'