У меня есть таблица вроде этого
name | personal_number
-----------------------------------------
Jon | 222
Alex | 555
Jon | 222
Jimmy | 999
Мне нужно получить каждое имя, которое персональное_состояние повторяется в таблице более 1, то есть результат должен быть:
Jon
Jon
Итак, вариант 1):
SELECT name FROM mytable WHERE personal_number IN (
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
Вариант 2):
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
Затем, используя php, извлеченные персональные_нимеры соединяются как строка (soemthing like this '222', '222'
) и запускают другой запрос
SELECT name FROM mytable WHERE personal_number IN( here joined string )
Вариант 2 работает примерно в 10 раз быстрее, чем вариант 1, это для меня неожиданно, я думал, что один запрос будет быстрее, но...
(В таблице 500 000 строк, столбец personal_number
не проиндексирован)
Итак, что вы имеете в виду о таких случаях? почему вариант 2 намного быстрее, чем вариант 1?