mysql - 查询需要很长时间才能执行

标签 mysql sql

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

delete 
FROM 
     emaillikebusiness_2 
WHERE 
    emaillikebusiness_2.Email_id
  IN (
    SELECT 
    per2.BusinessEmail2
    FROM 
       per2 );

解释语句给出输出

'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)'

我还在两个表上创建了 INDEX,还尝试在单个表上创建索引,但查询仍然需要很长时间才能执行。无论如何我可以减少查询执行时间

最佳答案

MySQL 倾向于优化 WHERE ... IN (SELECT ...) 很差。请改用 JOIN:

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

我发现使用 IN,它通常会对第一个表进行全面扫描,在第二个表的索引中搜索 Email_id,即使第一张 table 比第二张 table 大得多。但是通过 JOIN,它可以更有效地匹配两个表的索引。

关于mysql - 查询需要很长时间才能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368009/

相关文章:

c# - 在C#中调用MySql函数来验证用户名和密码

mysql - Mysql中有两个表数据的多个条件

MySQL触发器: copy auto_increment value to another column upon insert

mysql - 有很多列的表还是很多小表?

sql - 不小心将一个字符串插入到一个大的 int 列中。有没有机会恢复字符串?

mysql - SQL通过选择外键删除行

php - 确定字符串的文件类型

mysql - sql无法显示列的起始值中唯一的字符串值

mysql - 存储过程更新两行

如果不存在则创建表