MySQL:为什么我的查询无法完成?

时间:2017-08-21 13:37:59

标签: mysql

我不知道为什么查询我已经写过,不给我任何输出而且无法完成。这里http://sqlfiddle.com/#!9/8656d2/1是我的数据库的样本,实际上我有大约260k记录(行)。所以你可以看到查询在链接中使用该表,但在我的整个数据库中出现了问题。我等了近30分钟才得到任何结果,但查询过程是无休止的。我不知道现在该怎么办,所描述问题的原因是什么?

1 个答案:

答案 0 :(得分:2)

我实际上并不知道为什么查询没有在你的MySQL上完成260K记录。但我可以推测,SELECT语句中的相关子查询是罪魁祸首。让我们仔细看看那个人:

SELECT DATE_SUB(MAX(EVENT_TIME), INTERVAL 12 HOUR)
FROM my_table mt
WHERE
    EVENT_TYPE = '2' AND
    mt.ID = my_table.ID

您基本上是在告诉MySQL在整个表中进行MAX()计算, my_table表中的每个记录。请注意,因为子查询是相关的,所以可能必须为所有260K记录运行新鲜。希望你能看到260K x 260K操作会有点慢。

如果我是正确的,那么可能的解决方法是使用连接到子查询表来重新定义查询,该表查找表中每个ID的最大事件时间。此查询将运行一次,并且只运行一次,然后由MySQL来查找连接回原始表的有效方法。但无论如何,这种方法应该比你使用的方法更快。

SELECT t1.*
FROM my_table t1
INNER JOIN
(
    SELECT ID, MAX(EVENT_TIME) AS max_event_time
    FROM my_table
    WHERE EVENT_TYPE = '2'
    GROUP BY ID
) t2
    ON t1.ID = t2.ID AND
       t1.EVENT_TIME BETWEEN
           DATE_SUB(t2.max_event_time, INTERVAL 12 HOUR) AND
           t2.max_event_time
WHERE t1.EVENT_TYPE != 3
ORDER BY t1.ID;

这是您更新的小提琴的链接:

Demo