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