mysql regexp查询挂起,但在mysql进程重新启动时显示结果

mysql regexp查询挂起,但在mysql进程重新启动时显示结果,mysql,sql,regex,left-join,Mysql,Sql,Regex,Left Join,我有两张桌子。表1为1000万行,表2为1000万行。我需要用regexp搜索表2,然后加入表 当我这样做时: SELECT * FROM table2 LEFT JOIN table1 ON table1.ID1=table2.ID2 WHERE table2.column REGEX 'regexp' 查询永远不会结束 但是,当我终止mysqld进程时,它会在PHPMyAdmin中显示结果,显示的执行时间仅为0.07秒 如果我使用LIKE而不是REGEXP,就没有问题,如果我单独在表2

我有两张桌子。表1为1000万行,表2为1000万行。我需要用regexp搜索表2,然后加入表

当我这样做时:

SELECT * FROM table2
LEFT JOIN table1 
ON table1.ID1=table2.ID2 
WHERE table2.column REGEX 'regexp'
查询永远不会结束

但是,当我终止mysqld进程时,它会在PHPMyAdmin中显示结果,显示的执行时间仅为0.07秒

如果我使用LIKE而不是REGEXP,就没有问题,如果我单独在表2上使用REGEX也没有问题

ID1和ID2被索引。如果我解释select,它显示使用了键


有什么问题吗?

结果表明,整个问题是两个表中的ID字段的类型不同,分别是mediumint和int。一旦我将它们都更改为int,查询速度就会更快。
由于引擎是MyISAM,我无法使用外键,而外键可能会让我更快地意识到问题。

如果您有一个超过一百万行的复杂正则表达式,则可能需要一段时间。您无法对表名执行正则表达式;对列名执行此操作,例如table2.someColumn REGEX“regexp”我认为regexp不使用索引,即使是常量字符串。改为使用like。执行“desc”以查看查询是否使用任何索引。不过,我认为@SverriM.Olsen是对的-查询看起来有点可疑。@juergend这不是问题所在,正如我所说,仅表2上的正则表达式就可以很好地工作。