Задавайте вопросы, мы ответим
Вы не зашли.
Выполняю запрос
select table1.* from table1 where table1.ip in (select ip from table2 where ip like '%1%' ) LIMIT 1000
Так вот, сами по себе оба запроса выполняются быстро (менее 0.01 сек), а вот такой вложенный запрос - порядка 20 сек. Варианты с LEFT JOIN тоже выполняются небыстро (более секунды).
Думаю что это связано с тем, что (select ip from table2 where ip like '%1%' ) выполняется при каждой проверке условия (или нет?)
Тогда надо как то закешировать подзапрос, чтоб оператор IN выполнял выборку и уже сформированного заранее списка значений, чтоб это всё быстро обрабатывалось.
LEFT JOIN ещё не подходят потому, что понадобится такой запрос:
select table1.* from table1 where table1.ip in (select ip from table2 where ip like '%1%' ) OR table1.ip in (select ip from table3 where ip like '%1%' ) LIMIT 1000
Отредактированно noneim (01.04.2013 12:47:26)
Неактивен
noneim написал:
Думаю что это связано с тем, что (select ip from table2 where ip like '%1%' ) выполняется при каждой проверке условия (или нет?)
Да. Это старая бага (исправлена в mariadb 5.3)
Разбивайте запрос на 2 подставляйте значения ip в явном виде или переписывайте через join.
Кстати, зачем вам left join в данном случае? Достаточно простого join.
Относительно последнего запроса:
Неактивен