Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除的运行时间比选择的长_Mysql_Sql - Fatal编程技术网

Mysql 删除的运行时间比选择的长

Mysql 删除的运行时间比选择的长,mysql,sql,Mysql,Sql,下面的DELETE查询的运行时间比同一个SELECT语句长得多。为了进行比较,SELECT查询运行1分钟,DELETE查询运行5分钟以上,实际超时。为什么会发生这种情况?我如何防止这种情况 选择查询1分钟 删除查询5分钟以上 改进:您可能希望在编程语言中将查询更改为calculatedate=Now-7天,而不是在查询本身中进行计算 删除需要更多的时间:删除通常需要更多的时间,如果你用谷歌搜索,你会发现你并不孤单。原因是,与Select相比,Delete是一项昂贵的操作,因为Delete需要以下

下面的DELETE查询的运行时间比同一个SELECT语句长得多。为了进行比较,SELECT查询运行1分钟,DELETE查询运行5分钟以上,实际超时。为什么会发生这种情况?我如何防止这种情况

选择查询1分钟

删除查询5分钟以上


改进:您可能希望在编程语言中将查询更改为calculatedate=Now-7天,而不是在查询本身中进行计算

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

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

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


但您可以尝试建议的改进,并在时间上看到一些改进。

改进:您可能希望在编程语言中将查询更改为calculate Date=Now-7天,而不是在查询本身中进行计算

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

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

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


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

可能有很多原因导致删除花费的时间太长,并且在不了解系统的很多详细信息的情况下,很难找出原因。不过,对于初学者来说,删除实际上需要更新磁盘上的数据、重新排列索引等。它基本上总是比选择更昂贵。可能有很多原因导致删除花费的时间更长,而且在不了解大量系统细节的情况下,很难找出原因。不过,对于初学者来说,删除实际上需要更新磁盘上的数据、重新排列索引等。它基本上总是比选择更昂贵。
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)));
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)));