我正在使用我的 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/