2010-05-19 63 views
1

我有一個查詢用於查找重複數據。我發現最近查詢非常緩慢,而且速度越來越慢。這是我使用的查詢(改名列):優化查找重複數據的MySQL查詢

SELECT col1, 
     COUNT(col1) AS Counter 
    FROM people 
GROUP BY col1 
    HAVING (Counter > 1) 

我已經索引COL1(這是一個varchar(500)),但查詢需要的時間來執行的史詩量。有沒有更好的方法來處理這個問題,還是我卡住了?

+0

根據您的業務規則是否允許重複數據?否則,我會清除重複項,並在列上放置一個唯一的(如果不是主鍵的)鍵,以阻止數據首先進入表中。 – 2010-05-19 18:44:36

+0

允許複製,但僅限於某些其他條件存在時。這有點模糊,但這是我需要解決的問題。 :( – 2010-05-19 18:50:51

回答

3

試試這個:

SELECT * 
FROM people po 
WHERE EXISTS 
     (
     SELECT NULL 
     FROM people pi 
     WHERE pi.col1 = po.col1 
     LIMIT 1, 1 
     ) 

這將返回每個複製實例。

+0

這個效果非常好,而且速度更快,謝謝! – 2010-05-19 18:52:43

+0

非常聰明! – 2010-05-19 18:59:44

+0

只是爲了讓你知道,查詢從90秒降到了4秒,謝謝! – 2010-05-19 19:04:54