gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:55:37 25 4
gpt4 key购买 nike

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

最佳答案

我实际上不知道为什么查询没有在具有 260K 记录的 MySQL 上完成。但我可以推测 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 对 my_table 中的每条记录在整个表中进行MAX()计算 表。请注意,由于子查询是相关的,因此可能必须针对所有 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;

这里是更新后的 Fiddle 的链接:

Demo

关于MySQL:为什么我的查询无法完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com