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

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?
 

zerkms

TDD infected
Команда форума
1. ну запрос ты вроде сам написал - выбрать в другую таблицу и удалить старую как вариант

2. добавь unique индекс на поле data
 

kopipast

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

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

Serg Karpenko

Новичок
kopipast
попробуйте еще такой вариант:

delete from t
using table1 t, table1 t2
where t.id > t2.id and t.data = t2.data
 

vadim

Guest
kopipast
А нельзя при вставке в таблицу проверять, есть ли такие же значения?? Или одинаковые значения должны некторое время хранится??
 

vadim

Guest
но вы же знаете на какое значение вы хотите поменять?? сначало можно проверить, есть ли уже такое значение в базе
либо у данного поля поставить опцию уникальное, тогда база сама не будет давать такие же значения засовывать
 

kopipast

Новичок
vadim
может просто добавить "unique индекс на поле data"
а после обработки удалять 1 методом если что проскочет?

короче, надо тестить :)
 

zerkms

TDD infected
Команда форума
IGNORE на ошибки и UNIQUE индекс, вот и всё решение
 
Сверху