优化mysql查询以查找所有重复条目

优化mysql查询以查找所有重复条目,mysql,sql,performance,Mysql,Sql,Performance,我运行的查询如下: SELECT DISTINCT `tableA`.`field1`, `tableA`.`filed2` AS field2Alias, `tableA`.`field3`, `tableB`.`field4` AS field4Alias, `tableA`.`field6` AS field6Alias FROM (`tableC`) RIGHT

我运行的查询如下:

SELECT DISTINCT `tableA`.`field1`,
                `tableA`.`filed2` AS field2Alias,
                `tableA`.`field3`,
                `tableB`.`field4` AS field4Alias,
                `tableA`.`field6` AS field6Alias
FROM (`tableC`)
RIGHT JOIN `tableA` ON `tableC`.`idfield` = `tableA`.`idfield`
JOIN `tableB` ON `tableB`.`idfield` = `tableA`.`idfield`
AND tableA.field2 IN
  (SELECT field2
   FROM tableA
   GROUP BY tableA. HAVING count(*)>1)
ORDER BY tableA.field2

这是为了找到所有重复的条目,但是现在执行起来要花很多时间。有任何优化建议吗?

看起来您正试图在
表A的
字段2
中找到所有重复项。第一步是将
子查询中的
移动到
from
子句:

SELECT DISTINCT a.`field1`, a.`filed2` AS field2Alias,
       a.`field3`, b.`field4` AS field4Alias, a.`field6` AS field6Alias 
FROM tableA a left join
     tableC c
     on c.`idfield` = a`.`idfield` join
     `tableB` b
     ON b.`idfield` = a.`idfield` join
     (SELECT field2 
      FROM tableA
      group by field2 
      having count(*) > 1
     ) asum
     on asum.field2 = a.field2
ORDER BY tableA.field2

可能还有其他优化,但很难说。您的问题“查找重复项”和查询“将一组表连接在一起并过滤它们”并不完全匹配。了解哪些表具有哪些索引和唯一/主键也很有帮助。

请提供您的结构-以及您将哪些条目视为3个表的重复项
按表分组a。有
。。。看起来不对,是的。但是它正在寻找重复的entriesStructure、条目,还有一个SQLFiddle可以帮助尝试回答的人。+1很好!这正是我意识到的,但你比我快:)。同样值得一提的是,这会将子查询更改为派生表(不会对每一行执行)。它很快。phpmyadmin显示时间信息:显示第0-29行(总共1526行,查询耗时0.0242秒)