Mysql 为什么这个查询不能在合理的时间内完成?

Mysql 为什么这个查询不能在合理的时间内完成?,mysql,regex,Mysql,Regex,以下查询(包括MySQL 8.0.15上的子查询)将在15分钟后完成 此查询试图在“del”表中查找不在IMA表中的六位数值。REGEX_SUBSTR中的“Message”字段有其他文本值,因此这只是根据WHERE子句提取六位数部分 SELECT ID FROM del WHERE ID NOT IN ( SELECT DISTINCT REGEXP_SUBSTR ( Message, '\\d{6}' ) AS ID1 FROM

以下查询(包括MySQL 8.0.15上的子查询)将在15分钟后完成

此查询试图在“del”表中查找不在IMA表中的六位数值。REGEX_SUBSTR中的“Message”字段有其他文本值,因此这只是根据WHERE子句提取六位数部分

SELECT
    ID 
FROM
    del
WHERE
    ID NOT IN (
    SELECT DISTINCT
        REGEXP_SUBSTR ( Message, '\\d{6}' ) AS ID1 
    FROM
        IMA 
    WHERE
        AND Message LIKE '%deleted%'
    )
每个查询在不到20秒的时间内单独完成,但加在一起就有一个巨大的问题

两个结果的表大小均小于30000条记录

我尝试在消息字段上创建索引

这台计算机有128 GB的RAM和一个i9处理器


提前感谢,

您是否尝试过子查询预处理,例如在临时表中?子查询中的“where”关键字后面有一个“AND”多余,请不要认为它会改变任何内容。。。如上所述,尝试使用CTE请比“del”表中的六位数值更精确—您的意思是某个特定列等于该列吗?某个特定列将这6位数字作为子字符串?
IMA
中的7位子字符串会发生什么情况?在
del
中?为两个表提供一些示例数据,并指出“输出”应该是什么。谢谢大家!将数据分为两个表并以这种方式进行子查询是最好的解决方案。我感谢所有的精彩的投入和想法。