[mysql] вывод всех дубликатов

Нужно было в таблице найти дубликаты по столбцу и вывести их по всем столбцам. В итоге смастерил вот такой запрос:

mysql> select * from alias where address IN (select address from alias GROUP BY address HAVING COUNT(address)>1) order by address;

Ищет дубликаты в столбце address, выводит полную строку из таблицы alias и сортирует вывод. В итоге получилось такое:

mysql> select * from alias where address IN (select address from alias GROUP BY address HAVING COUNT(address)>1) order by address;
+--------------------------+-----------------------------------------+---------------+---------------------+---------------------+--------+
| address                  | goto                                    | domain        | created             | modified            | active |
+--------------------------+-----------------------------------------+---------------+---------------------+---------------------+--------+
| directoria@domain.ua     | directoria@domain.ua                    | domain.ua     | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |      1 |
| directoria@domain.ua     | kmd@domain.ua                           | domain.ua     | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |      1 |
| help@domain.ua           | help_desk@domain.ua                     | domain.ua     | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |      1 |
| help@domain.ua           | tech@domain.ua                          | domain.ua     | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |      1 |

А теперь неприятное: этот запрос очень тяжёлый, выполнялся 0,8 секунд в таблице с 500 записями на серваке с 8 Гб и 2х4-ядерных проца. Поэтому, пользуйтесь этим запросом осторожно, ибо запрос в пару тысяч записей может завалить его.

[mysql] вывод всех дубликатов: 2 комментария

  1. Серей

    Огромное спасибо, добавил в закладки…
    Делал запрос в табличке с 2200 записей = Запрос занял 2.7834 сек
    Хочу сделать запрос в табличке с 300000+ записей 🙂
    посмотрим что будет… :)))
    сервак IntelCore i7 8 ядер, 24ГБ оперативы

  2. Валерий

    Не мое решение но такйо запрос быстрее обрабатывает (——-

    select emailen, count(*) from tyh76_cck_store_item_content group by emailen having count(*)>1 order by count(*) desc
    ——-)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *