2016-02-13 2 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 то же самое (но сохраняя один с наибольшим идентификатором):

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; 
Смежные вопросы