2013-08-29 52 views
0

主題表有30M行。我正在執行查詢以查找重複的hashhash被定義爲在30M記錄表中查找重複的列

`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` 

它需要前約5-7分鐘我按下Ctrl+C中止查詢。我再次運行它,仍然無法等待那麼久。

我怎樣才能更快得到這個結果?

我知道這樣做會稍微慢一點,但是我認爲8分鐘太多了。

+1

你對'hash'或...呃..'signature'的指數? –

+0

請發佈您的餐桌結構 –

回答

1

確保在hash(或是signature?)上有索引。

COUNT(id)替換爲COUNT(hash)(或COUNT(signature))。

+0

它沒有索引。我已經申請了索引,現在它更快了。 –

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);

1

如果你只需要重複條目數,那麼你可以嘗試

select count(*)-count(distinct hash) from images