Удалить дубликаты из двух столбцов - PullRequest
0 голосов
/ 07 сентября 2011

Доброе утро, stackoverflownians,

У меня очень большая таблица с дубликатами в двух столбцах.Означает, что если числа в строке a дублируются в столбцах col1 и col2 в строке b, я должен оставить только строку a:

## table_1 
col1    col2

1           10
1           10
1           10
1           11
1           11
1           12
2           20
2           20
2           21
2           21


# should return this tbl without duplication

col1    col2

1           10
1           11
1           12
2           20
2           21

Моя предыдущая учетная запись кода только для столбца col1, и я не знаю, как сделать запросэто на два coluns:

CREATE TABLE temp LIKE db.table_1;
INSERT INTO temp SELECT * FROM table_1 WHERE 1 GROUP BY col1;
DROP TABLE table_1;
ALTER TABLE temp RENAME table_1;

Так что я подумал об этом:

CREATE TABLE temp LIKE db.table_1;
INSERT INTO temp(col1,col2)
  SELECT DISTINCT col1,col2 FROM table_1;

then drop and rename..

Но я не уверен, что это сработает, и MySQL, как правило, работает нестабильно, если это занимает слишком много времени.Мне придется остановить запрос, и что мой сервер снова рухнет .. TT

У нас есть 200 000 000 строк, и все они имеют по крайней мере один дубликат ..

Любое предложение кода?:) Также .. Сколько времени это займет?минуты или часы?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

вы уже знаете достаточно способов :)

Вы можете попробовать это также

Используйте INSERT IGNORE вместо INSERT. Если запись не дублирует существующую запись, MySQL вставляет ее как обычно. Если запись является дубликатом, ключевое слово IGNORE сообщает MySQL о том, что она должна отбрасывать ее без уведомления.

Чтение из существующей таблицы, а затем запись в новую таблицу с использованием INSERT IGNORE. Таким образом, вы можете контролировать процесс вставки в зависимости от вашего ресурса.

Когда используется INSERT IGNORE, и у вас есть ключевые нарушения, MySQL НЕ выдает предупреждение !!!

0 голосов
/ 07 сентября 2011

Отдельное предложение - это путь, но потребуется много времени, чтобы запустить столько записей. Я бы добавил столбец идентификаторов, который является autoincrment, и это ваш ПК. После этого вы можете запустить дедупликацию поэтапно, но время ее не истечет.

Удачи и HTH - Джо

...