Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте. У меня такая проблема:
Нужно найти одинаковые данные в таблице назовем ее table.
Есть поля Title (название)
FileType (расширение файла)
Id (уникальное для каждого)
И еще несколько полей которые нам не нужны здесь.
Всего в таблице около 300 тысяч записей.
В таблице есть одинаковые названия Title но разные FileType
Хотелось бы вывести все одинаковые значения отсортированные по Title чтобы поудалять ненужные.
Вот таким запросом попробовал отсортировать но Мускул напрягается на долго... Ждал долго около часа... Ничего путного не получилось. Может кто подскажет.
select *
from table
where Title in (
select Title
from table
group by Title
having count(*) > 1
)
order by Title
Неактивен
А зачем Вам подзапрос здесь? Не проще ли так:
Неактивен
индекс по полю Title есть.
В том то и дело что мне нужно select * сделать чтоб подредактировать ручками одинаковые записи.
Неактивен
Попробуйте через JOIN запрос переписать - вполне может быстрее получится.
Неактивен
незнаю как правильно написать через join этот запрос ;-(
Неактивен
Что-то такое:
Неактивен
Ух !!! СРАБОТАЛО! И очень шустро. Спасибо. А можете объяснить почему через JOIN так быстро делает? Я весь проект переписывать сейчас начну через JOIN )))
Неактивен
У MySQL до сих пор, к сожалению, не поправлена бага, что независимый запрос в IN часто считается за зависимый и исполняется для каждой строки внешнего запроса. Поэтому запросы с IN и NOT IN действительно на всякий случай стоит писать в форме JOIN, вреда от этого не будет. Весь проект переписывать вряд ли стоит, а вот узкие места - вполне .
Неактивен
Огромаднейшее спасибо ))))
Неактивен
nkaren, попробуйте поставить MariaDB. С MySQL полная совместимость, но подзапросы обрабатываются корректно - переписывать не придется. См. наш доклад в Новосибирске: Новое в Percona Server и MariaDB.
Неактивен
Спасибо за совет, сейчас буду смотреть ))
Неактивен