|
|
|
Обработка вложенного запроса
|
|||
|---|---|---|---|
|
#18+
Товарищи, помогите советом 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-шников, то все происходит быстро и по индексам. Как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 13:46 |
|
||
|
Обработка вложенного запроса
|
|||
|---|---|---|---|
|
#18+
UberLamer, проблема в том, что подзапрос ошибочно трактуется как зависимый, т.е. выполняется для каждой строки внешнего запроса. Решение: 1. обновиться до MariaDB 5.3/MySQL 5.6 2. переписать запрос через JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 14:48 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=89&tid=1831304]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 324ms |

| 0 / 0 |
