我有一个正在尝试优化的 MySQL 查询。我有一个包含几十万行的表 t,其中有一个 varchar 列 x(以及其他一些列),该列已建立索引并且具有少于 1000 个不同的值。我试图获取与特定正则表达式匹配的所有不同的 x 。这是表述这一点的直接方法:
SELECT DISTINCT x
FROM t
WHERE x REGEXP 'someregexp'
但是MySQL在使用REGEXP时似乎完全忽略了索引,所以需要几秒钟的时间。由于我的不同值数量相当少,因此如果查询使用索引获取不同值,然后使用正则表达式过滤结果,那么处理这个问题应该很快,但现在情况似乎并非如此,因为它应该能够在不到一秒的时间内运行。
有什么方法可以提示 MySQL 查询优化器它可以这样做吗?
最佳答案
也许尝试这样的事情:
SELECT d.x
FROM (SELECT DISTINCT x FROM t) d
WHERE d.x REGEXP 'someregexp'
这样,它应该首先执行不同的过滤(对于索引来说速度很快),然后执行正则表达式(如果只需要对几个不同的值执行,则速度很快)。
关于mysql - 优化正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39896194/