主题表有30M行。我正在执行查询以查找重复的hash
。 hash
定义为
`hash` varchar(50) NOT NULL;
查询
SELECT Count(*)
FROM (SELECT Count(id) `num`,
`signature`
FROM `images`
WHERE `hash` IS NOT NULL
GROUP BY `hash`
HAVING `num` > 1) AS `count_table`
在我按Ctrl+C
中止查询之前大约需要5-7分钟。我再次运行它仍然不能等待那么多时间。
如何更快地获得此结果?
我知道在进行分组时这会有点慢。但我认为8分钟太多了。
答案 0 :(得分:1)
确保hash
上有一个索引(或signature
?)。
将COUNT(id)
替换为COUNT(hash)
(或COUNT(signature)
)。
答案 1 :(得分:1)
如果您只需要重复条目的计数,那么您可以尝试
select count(*)-count(distinct hash) from images
答案 2 :(得分:0)
如果我理解正确,你只想要返回重复的列吗? 试试这个 SELECT * FROM table_name AS t1 WHERE EXISTS(SELECT * FROM table_name AS t2 WHERE t1.hash = t2.hash and t1.id!= t2.id);