Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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,我正在使用我的sql,我想删除表emaillikebusiness_2中的重复行,该表比较另一个名为per2的表中的数据。我正在使用的查询是 delete FROM emaillikebusiness_2 WHERE emaillikebusiness_2.Email_id IN ( SELECT per2.BusinessEmail2 FROM per2 ); explain语句给出输出 '1', 'PRIMARY',

我正在使用我的sql,我想删除表emaillikebusiness_2中的重复行,该表比较另一个名为per2的表中的数据。我正在使用的查询是

delete 
FROM 
     emaillikebusiness_2 
WHERE 
    emaillikebusiness_2.Email_id
  IN (
    SELECT 
    per2.BusinessEmail2
    FROM 
       per2 );
explain语句给出输出

'1', 'PRIMARY', 'emaillikebusiness_2', 'ALL', NULL, NULL, NULL, NULL, '30670', 'Using where'
'2', 'DEPENDENT SUBQUERY', 'per2', 'ALL', 'idx_email2person2', NULL, NULL, NULL, '24710', 'Range checked for each record (index map: 0x1)'

我也在这两个表上创建了索引,也尝试在单个表上创建索引,但查询仍然需要很长时间才能执行。我是否可以减少查询执行时间

MySQL倾向于优化
其中。。。在(选择…)
中。请改用联接:

DELETE e.*
FROM emaillikebusiness_2 AS e
JOIN per2 AS p
ON e.Email_id = p.BusinessEmail2

我发现,使用中的
,它通常会对第一个表进行完整扫描,在第二个表的索引中搜索
电子邮件id
,即使第一个表比第二个表大很多。但是通过连接,它可以更有效地匹配两个表的索引。

MySQL倾向于优化
其中。。。在(选择…)
中。请改用联接:

DELETE e.*
FROM emaillikebusiness_2 AS e
JOIN per2 AS p
ON e.Email_id = p.BusinessEmail2
我发现,使用
中的
,它通常会对第一个表进行完整扫描,在第二个表的索引中搜索
电子邮件id
,即使第一个表比第二个表大很多。但是使用联接,它可以在两个表的索引之间进行更有效的匹配。

请尝试以下方法:

DELETE emaillikebusiness_2.* FROM emaillikebusiness_2
 INNER JOIN per2 ON emaillikebusiness_2.Email_id = per2.BusinessEmail2

Because in most cases, Inner Join is significantly faster than IN clause.
试试这个:

DELETE emaillikebusiness_2.* FROM emaillikebusiness_2
 INNER JOIN per2 ON emaillikebusiness_2.Email_id = per2.BusinessEmail2

Because in most cases, Inner Join is significantly faster than IN clause.

顺便问一下,您的表引擎MYISAM或INNODB是什么类型的?感谢vivek的努力,但我的问题已经由另一位评论员回答了。。。我使用的是InnoDBbtw。您的表引擎MYISAM或INNODB是什么类型的?感谢vivek的努力,但我的问题已经被另一位评论员回答了。。。我正在使用InnoDB