mysql regexp query hangs, but displays results when mysql process restarts
我有两张桌子。 Table1 是 1000 万行,Table2 是 100 万行。我需要用正则表达式搜索 Table2,然后加入这些表。
当我这样做时:
查询永远不会结束。
但是,当我杀死 mysqld 进程时,它会显示结果(在 PHPMyAdmin 中),显示的执行时间仅为 0.07 秒。
如果我使用 LIKE 代替 REGEXP 没有问题,如果我单独在 table2 上使用 REGEX 也没有问题。
ID1
- 如果您有一个超过 100 万行的复杂正则表达式,可能需要一段时间。
-
您不能对表名执行正则表达式;对列名执行此操作(例如 WHERE table2.someColumn REGEX 'regexp')
-
我不认为 regexp 使用索引,即使对于常量字符串也是如此。请改用 like。
-
执行"desc"以查看查询是否使用任何索引。我认为@SverriM.Olsen 是对的——查询看起来有点可疑。
-
@juergend 这不是问题,正如我所说,table2 上的正则表达式单独工作正常。
-
@GordonLinoff:是的,我知道,我索引了 ID。我知道正则表达式需要时间,但同样,仅在 table2 上它运行正常。在这种情况下我不能使用 like 。
-
@SverriM.Olsen:抱歉,忘记添加列名!
-
@ethrbunny:正如我所说,我这样做了,它使用了 ID 的索引。该列还具有唯一索引和全文索引,但这不是问题。
-
对我之前评论的更正:我不知道是否可以对表名执行 REGEX ,但这确实看起来很奇怪。
-
@SverriM.Olsen:再次抱歉,我的错,这不是我想做的,我的问题中的错字,而不是我的实际查询
原来整个问题是两个表中的 ID 字段属于不同的类型(mediumint 与 int)。一旦我将它们都更改为 int,查询速度很快。
由于引擎是 MyISAM,因此我无法使用可能会让我更快意识到问题的外键。