Mysql 执行查询需要很长时间
我正在使用我的sql,我想删除表emaillikebusiness_2中的重复行,该表比较另一个名为per2的表中的数据。我正在使用的查询是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',
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