2016-09-14 110 views
0

我有3個lac的記錄。我需要統計重複的記錄並返回所有重複的記錄(例如,如果exam​​[email protected]是10次,然後返回所有10條記錄的重複數爲10)減少查找重複記錄查詢執行時間

我已經創建了查詢,但需要15秒的時間。任何建議減少時間?

SELECT g.guest_name, g.email, b.totalCount AS duplicate_guest 
FROM guest g 
INNER JOIN (SELECT email, COUNT(Id) AS totalCount FROM guest GROUP BY email) b ON g.email = b.email 
+0

請加解釋,並列出你在'guest'表有索引的輸出。 – Shadow

回答

0

需要通過添加條件如下面的查詢,以減少對加盟條件的數據。

還要確保應該對電子郵件列的索引來優化它

SELECT g.guest_name, g.email, b.count as duplicate_guests 
FROM guest g 
INNER JOIN 
(
    SELECT email, COUNT(Id) AS count 
    FROM guest 
    GROUP BY email 
    HAVING count(*) > 1 
) b ON g.email = b.email 
+0

非常感謝,現在需要1.3秒 非常有用的建議**索引電子郵件** –

+0

歡迎您... –

0

只需添加HAVING count(*) > 1到內選擇

SELECT g.guest_name, g.email, b.totalCount AS duplicate_guest 
FROM guest g 
INNER JOIN 
(
    SELECT email, COUNT(Id) AS totalCount 
    FROM guest 
    GROUP BY email 
    HAVING count(*) > 1 
) b ON g.email = b.email 
+0

謝謝,現在需要5秒 –