Майэскьюэль не понял подзапроса
Feb. 13th, 2012 06:54 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Странности творятся. Почитав мануал, обращаюсь к друпаловой БД, ищу дубликаты адресов в таблице с 7500 строками:
P. S. Понятно, что я могу найденное на первом шаге тупо перебрать в цикле, написав какой-нибудь перлоскрипт, однако хочется сделать как-то изящнее.
MySQL достаточно резво выдаёт ответ из почти семи десятков строк. Делаю запрос с подзапросом, чтоб выбрать номера узлов с найденными на предыдущем шаге дублями:SELECT `alias` FROM `PREFIX_url_alias` GROUP BY `language`, `alias` HAVING COUNT(*)>1;
В итоге MySQL тяжко задумывается — вот уж 20 минут непонятно, что делает. ПосмотрелSELECT `source` FROM `PREFIX_url_alias` WHERE `alias` IN ( SELECT `alias` FROM `PREFIX_url_alias` GROUP BY `language`, `alias` HAVING COUNT(*)>1 );
SHOW CREATE TABLE
— по полю `alias`
строится индекс. Чё ему ещё надо-то?P. S. Понятно, что я могу найденное на первом шаге тупо перебрать в цикле, написав какой-нибудь перлоскрипт, однако хочется сделать как-то изящнее.
no subject
Date: 2012-02-13 02:28 pm (UTC)то оно априори на подзапросах тормозить будет
EXPLAIN погляди ... можешь удивиться
no subject
Date: 2012-02-13 03:32 pm (UTC)no subject
Date: 2012-02-14 05:11 am (UTC)Монти и Петя Зайвцев, по совету Момджана
начали приносить лобковые скальпы под портрет Ларри Эллисона и Стива (не джобс) Болмера ;-))
no subject
Date: 2012-02-14 05:26 am (UTC)no subject
Date: 2012-02-15 11:20 am (UTC)no subject
Date: 2012-02-15 03:12 pm (UTC)no subject
Date: 2012-02-13 04:13 pm (UTC)Поглядел
EXPLAIN
, поменял местами поля вGROUP BY
, поглядел ещё раз (стало лучше), но всё равно неидеально: похоже, он только в подзапросе использует индекс, а в основном запросе — нет:no subject
Date: 2012-02-14 05:12 am (UTC)поэтому 20 минут =)
в общем все плохо
no subject
Date: 2012-02-13 03:32 pm (UTC)можно сделать temp table, выбрав туда ключи дубликатов. и уже из той таблицы попробовать сделать alias in (select ...
в обеих таблицах (временной и исходной) ключевое поле (alias) должны быть проиндексированы.
no subject
Date: 2012-02-14 05:13 am (UTC)