Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 使用SELECT子查询删除被卡住_Mysql_Subquery - Fatal编程技术网

Mysql 使用SELECT子查询删除被卡住

Mysql 使用SELECT子查询删除被卡住,mysql,subquery,Mysql,Subquery,以下delete语句导致mysql卡住: 从id为的域中删除,从组id为9的域组中选择域id 这句话也同样适用于: 从组id=9 a的域组id中选择域id作为id从选择域id中选择id的域中删除 有人能解释为什么吗 原因与SQL查询的优化有关。您的第一个版本是评估每一行的子查询——尽管在较新版本的MySQL中已经修复了这一问题。第二个版本是创建一个临时表,因此速度要快得多 我建议使用exists或join: 或: 我还建议为上述两个版本提供一个索引domain\u id,group\u id,或

以下delete语句导致mysql卡住:

从id为的域中删除,从组id为9的域组中选择域id

这句话也同样适用于:

从组id=9 a的域组id中选择域id作为id从选择域id中选择id的域中删除


有人能解释为什么吗

原因与SQL查询的优化有关。您的第一个版本是评估每一行的子查询——尽管在较新版本的MySQL中已经修复了这一问题。第二个版本是创建一个临时表,因此速度要快得多

我建议使用exists或join:

或:

我还建议为上述两个版本提供一个索引domain\u id,group\u id,或为in版本提供domain\u groups\u id,domain\u id

DELETE d FROM domains d
    WHERE EXISTS (SELECT 1 FROM domains_groups dg WHERE dg.group_id = 9 AND dg.domain_id  = d.id);
DELETE d
    FROM domains d JOIN
         domaings_groups dg
         ON dg.group_id = 9 AND dg.domain_id  = d.id;