gpt4 book ai didi

mysql - DELETE 运行时间比 SELECT 长

转载 作者:行者123 更新时间:2023-11-30 22:25:42 25 4
gpt4 key购买 nike

下面的 DELETE 查询比完全相同的 SELECT 语句运行时间更长。作为比较,SELECT 查询运行了 1 分钟,DELETE 查询运行了 5 分钟以上,实际上超时了。为什么会发生这种情况,我该如何预防?

选择查询(1 分钟)

SELECT 
*
FROM
company
WHERE
symbol IN (SELECT
`hd`.`symbol` AS `symbol`
FROM
(`stockton`.`historical_data` `hd`
JOIN (SELECT
MAX(`stockton`.`historical_data`.`histDate`) AS `maxhd`
FROM
`stockton`.`historical_data`) `m`)
GROUP BY `hd`.`symbol` , `m`.`maxhd`
HAVING (MAX(`hd`.`histDate`) < (NOW() - INTERVAL 7 DAY)));

删除查询(5 分钟以上)

DELETE
FROM
company
WHERE
symbol IN (SELECT
`hd`.`symbol` AS `symbol`
FROM
(`stockton`.`historical_data` `hd`
JOIN (SELECT
MAX(`stockton`.`historical_data`.`histDate`) AS `maxhd`
FROM
`stockton`.`historical_data`) `m`)
GROUP BY `hd`.`symbol` , `m`.`maxhd`
HAVING (MAX(`hd`.`histDate`) < (NOW() - INTERVAL 7 DAY)));

最佳答案

改进:您可能希望更改查询以使用您的编程语言计算 Date = Now - 7 days,而不是在查询本身中计算。

删除需要更多时间:删除通常需要更多时间,如果您用谷歌搜索,您会发现您并不孤单。原因是与 Select 相比,Delete 是一项昂贵的操作,因为 Delete 需要执行以下操作:1) 将记录与您的情况进行比较2)从表中删除3) 从表上创建的一个或多个索引中删除引用4) 可能会或可能不会更新表的元数据,具体取决于引擎

而选择是:1)将记录与您的条件进行比较,或者如果条件正在使用索引则使用索引2) 返回结果值

考虑到您有更大的表,您可能有更大的索引,并且与仅选择相比,操作将花费时间。

但是您可以尝试建议的改进,应该会及时看到一些改进。

关于mysql - DELETE 运行时间比 SELECT 长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35297637/

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