Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обработка вложенного запроса / 3 сообщений из 3, страница 1 из 1
19.10.2016, 13:46
    #39329825
UberLamer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка вложенного запроса
Товарищи, помогите советом plz! Свой ник на этом форуме я выбрал изначально говорящим, дабы обозначить свою никчемность в DBA-шных делах. Проблема следующая:

На MySQL делаю запрос со вложенным селектом

select name from city_translations where city_id in (select id from cities where country_id = 6208)


Ну то есть запрашиваю названия городов по списку id-шников, который берется селектом городов по id определенной страны. Казалось бы, проще некуда.

Но запрос обрабатывается долго, хотя каких я только индексов не понастроил.

Explain (скрин прилагается) показывает, что вроде как основной запрос прожевывает всю таблицу city_translations (4271777 rows).

Как я понимаю, запрос со вложенным селектом выполняется по схеме "основной селект вытаскивает всю таблицу, а потом происходит уточнение по вложенному".
Если же вместо вложенного селекта просто натыкать id-шников, то все происходит быстро и по индексам.

Как с этим бороться?
...
Рейтинг: 0 / 0
19.10.2016, 14:48
    #39329902
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка вложенного запроса
UberLamer,

проблема в том, что подзапрос ошибочно трактуется как зависимый, т.е. выполняется для каждой строки внешнего запроса.
Решение:
1. обновиться до MariaDB 5.3/MySQL 5.6
2. переписать запрос через JOIN
...
Рейтинг: 0 / 0
19.10.2016, 16:19
    #39330001
UberLamer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка вложенного запроса
retvizan,

Спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обработка вложенного запроса / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]