mysql - 优化正则表达式查询

标签 mysql query-optimization

我有一个正在尝试优化的 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/

相关文章:

sql - 每行查询最后 N 个相关行

mysql - 使用 MAX() 优化 MYSQL 查询

php - 如何优化这个复杂的 MySql 查询

mysql - utf8 和 latin1 的区别

php - orWhere 在 Laravel 查询生成器中查询

sql - 简单查询优化

Hibernate @OneToOne 即使使用 @Fetch(FetchMode.JOIN) 也会执行多个查询

mysql - 从 MySQL 迁移到 MariaDB

javascript - 从 Mysql 查询中获取 5 列及其值并转换为 PHP

mysql - 当我想要存储此类数据时,应该如何建立数据库?