Как удалить дубли из БД mysql ?

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

backoff

Client
Регистрация
20.04.2015
Сообщения
6 386
Реакции
6 671
Баллы
113
привет.
есть таблица, в ней есть столбец links (ссылки на внутренние страницы сайта), много строк, хочу удалять дубли, если попадаются, каким запросом это лучше всего сделать?
спасибо
 
привет.
есть таблица, в ней есть столбец links (ссылки на внутренние страницы сайта), много строк, хочу удалять дубли, если попадаются, каким запросом это лучше всего сделать?
спасибо
 
  • Оценить
Реакции: backoff
я так понимаю нужен этот запрос
SQL:
Развернуть Свернуть Копировать
DELETE
    `table`
FROM 
    `table`
LEFT OUTER JOIN
    (SELECT MIN(`id`) AS `id`, `col1` FROM `table` GROUP BY `col1`) AS `tmp`
ON
    `table`.`id` = `tmp`.`id` 
WHERE
    `tmp`.`id` IS NULL

но не понимаю что куда пихать, чтоб не запороть)
правильно ли?
table - это название таблицы
col1 - это нужный столбец
а вот что такое id - наверно индекс
и что такое tmp - наверно временные строки?

как составить запрос, если
моя таблица называется - mytable555
столбец - page

верно?
SQL:
Развернуть Свернуть Копировать
DELETE
    `mytable555`
FROM 
    `mytable555`
LEFT OUTER JOIN
    (SELECT MIN(`id`) AS `id`, `page` FROM `mytable555` GROUP BY `page`) AS `tmp`
ON
    `mytable555`.`id` = `tmp`.`id` 
WHERE
    `tmp`.`id` IS NULL
 
Да, все верно. Рекомендую делать резервные копии БД перед такими операциями, а то мало ли.
 
запрос завис на 12й минуте, и чето ничего не удалил, я посмотрел запросов другим (select), посмотреть сколько дублей, запрос занял 4 минуты и показал 330к дублей из 5.2кк срок.
сделал дамп и руками вытащил все строки, через - EmEditor решил удалить дубли, удалилось дублей 4.5кк )))))
база из 800мб, стала 80
как-то так)
 
запрос завис на 12й минуте, и чето ничего не удалил, я посмотрел запросов другим (select), посмотреть сколько дублей, запрос занял 4 минуты и показал 330к дублей из 5.2кк срок.
сделал дамп и руками вытащил все строки, через - EmEditor решил удалить дубли, удалилось дублей 4.5кк )))))
база из 800мб, стала 80
как-то так)
Я чистил базу на 11кк строк через HeidiSQL примерно минут 40, около 4кк дублей
 
DELETE FROM mytable555
WHERE page IN (
SELECT page
FROM mytable555
GROUP BY page
HAVING COUNT(*) > 1
);
 
а вообще в самой БД настрой столбец что бы если уже есть такое значение то больше не записывалось.

PHP:
Развернуть Свернуть Копировать
ALTER TABLE mytable555
ADD CONSTRAINT unique_page UNIQUE (page);

119666
 
Последнее редактирование:
  • Оценить
Реакции: kagorec и backoff
теперь прикол в том что нельзя добавлять списком, если в списке есть дубль, то ничего не добавляется, можно ли как-то обойти это? а то добавлять по 1й строке - не варик (
 
теперь прикол в том что нельзя добавлять списком, если в списке есть дубль, то ничего не добавляется, можно ли как-то обойти это? а то добавлять по 1й строке - не варик (
используй INSERT IGNORE
 
  • Оценить
Реакции: backoff

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)