优化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秒)