Получить дублирующие записи в MySQL

Передо мной встала задача: нужно получить IP-адреса и информацию о пользователях, у которых эти самые IP-адреса совпадают. Решение такое:

SELECT *
FROM users
WHERE ip IN (
  SELECT ip
  FROM users
  GROUP BY ip
  HAVING count(ip) > 1
)
ORDER BY ip

На выходе мы получим что-то примерно такое:

login 1 127.0.0.1

login2 127.0.0.1

login3 127.0.0.1

....

login N 127.0.0.1

Обратите внимание, что скорость выполнения данного запроса прямо зависит от количества записей в таблице users. Больше записей — дольше будет выполняться запрос. Не рекомендую его выполнять к таблице, у которой больше 5.000 записей (в таком случае нужно будет «изобретать» что-то другое).

Получить дублирующие записи в MySQL
4 votes, 5.00 avg. rating (99% score)

2 thoughts on “Получить дублирующие записи в MySQL

  1. Нет ничего проще в оптимизации запроса, как разбить его на меньшие части :) Если вложенный SELECT исполнить сначала отдельно и средствами языка программирования сложить полученные ip в строку, которую потом использовать в IN. Таким образом мы избавляемся от цикличности, которая присутствует в данном примере.

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

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