вопрос по уникальности строк в таблице

  • Автор темы Автор темы kopipast
  • Дата начала Дата начала

kopipast

Новичок
вопрос по уникальности строк в таблице

всем привет.

есть таблица table1 в БД mysql

столбцы: id, data
PRIMARY KEY — id, он же автоинкремент

значение data иногда повторяются. нужно удалить повторы, оставив 1 строчку, впринципе, без разницы, какой у ней будет id

таблица довольно большая — тысяч сто-пятьсот строк

как это лучше сделать
а. меньше по нагрузке на сервер
б. быстрее

и правильно ли с точки зрения синтаксиса 8)?

1__________
Delete from table1 where data not in (select max(data) from table1 group by id, data)

2__________
CREATE TABLE table2
SELECT MAX(data), id FROM table1 GROUP BY id;
ALTER TABLE table2 ADD PRIMARY KEY (data);
DROP TABLE table1;
RENAME TABLE table2 TO table1;

+ можно ли сразу сделать два PRIMARY KEY, id и data?
если да, то таблица сразу будет получаться с уникальными строчками и по id и по data?
 
1. ну запрос ты вроде сам написал - выбрать в другую таблицу и удалить старую как вариант

2. добавь unique индекс на поле data
 
т.е. при большом количестве записей в таблице её выгоднее переписать, а не удалять дубликаты?

насколько я понимаю, SELECT MAX(data), id FROM table1 GROUP BY id; какраз и выбирает уникальные записи по data из таблицы. как в первом случае, так и во втором, выборка происходит 1 раз...
 
kopipast
попробуйте еще такой вариант:

delete from t
using table1 t, table1 t2
where t.id > t2.id and t.data = t2.data
 
kopipast
А нельзя при вставке в таблицу проверять, есть ли такие же значения?? Или одинаковые значения должны некторое время хранится??
 
но вы же знаете на какое значение вы хотите поменять?? сначало можно проверить, есть ли уже такое значение в базе
либо у данного поля поставить опцию уникальное, тогда база сама не будет давать такие же значения засовывать
 
vadim
может просто добавить "unique индекс на поле data"
а после обработки удалять 1 методом если что проскочет?

короче, надо тестить :)
 
IGNORE на ошибки и UNIQUE индекс, вот и всё решение
 
Сверху