2016-02-13 106 views
0

我有一個100,000行的表,並希望刪除所有重複。我已經嘗試過以下查詢了:快速MYSQL查詢刪除重複

DELETE t1 FROM wt_tweets t1, wt_tweets t2 WHERE t1.ID < t2.ID AND t1.tweet_id = t2.tweet_id OR t1.tweet_user_id = t2.tweet_user_id 

不幸的是,它很慢。所以我想知道是否有更快的選擇。

+1

請出示一下副本就是例子。你的問題不清楚。 –

+0

我相當肯定現有的查詢總是會刪除_all_ tweets,所以我認爲你需要更詳細的描述你正在嘗試做什麼。 –

+0

我不經常使用mysql。我也注意到了。 –

回答

2

您的查詢分析如下:

DELETE t1 FROM wt_tweets t1, wt_tweets t2 
    WHERE (t1.ID < t2.ID AND t1.tweet_id = t2.tweet_id) OR 
      (t1.tweet_user_id = t2.tweet_user_id) 

在這種情況下,這將刪除所有行(假設tweet_user_id不是null)。所以,更快的方法是:

TRUNCATE TABLE wt_tweets; 

但是,我懷疑你的意圖。

如果你想刪除行,其中tweet_id是相同的(但保持一個ID最大):

DELETE t 
    FROM wt_tweets t LEFT JOIN 
     (SELECT tweet_id, MAX(ID) as maxId 
      FROM wt_tweets 
      GROUP BY tweet_id 
     ) tt 
     ON t.tweet_id = tt.tweet_id AND t.id = tt.maxId 
    WHERE tt.tweet_id IS NULL;