0

主题表有 30M 行。我正在执行查询以查找重复项hashhash定义为

 `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分钟我觉得太多了。

4

3 回答 3

1

如果您只需要重复条目的计数,那么您可以尝试

select count(*)-count(distinct hash) from images
于 2013-08-29T11:14:14.853 回答
1

确保有一个索引hash(或者它是signature?)。

替换COUNT(id)COUNT(hash)(或COUNT(signature))。

于 2013-08-29T08:23:29.063 回答
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);

于 2013-08-29T08:27:25.603 回答