Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Тормоза с вложенными запросами (Timur) 26/04/2007 - 22:36:00
      Re: Тормоза с вложенными запросами (AXAE) 27/04/2007 - 10:50:15
      Re: Тормоза с вложенными запросами (Timur) 27/04/2007 - 20:53:17
      Re: Тормоза с вложенными запросами (AXAE) 28/04/2007 - 07:08:37
      Re: Тормоза с вложенными запросами (Timur) 30/04/2007 - 17:38:06
      Re: Может три таблицы попробовать (AXAE) 04/05/2007 - 14:35:47
      Re: Может три таблицы попробовать (Timur) 04/05/2007 - 15:14:17

> Original message text:
> From: Timur - 26/04/2007 - 22:36:00
> Subject:Тормоза с вложенными запросами
> -----------------
> Используется такой запрос:
> SELECT object_id,x,y FROM kiev2_data where object_id
> IN ( select distinct object_id from kiev2_data where (x between 50.448532 and 50.448532) and (y between 30.257377 and 30.257377) )
> Он выполянется секунд 5.
>
> Если же выполнить эти запросы отдельно(результаты вложенного подставить вручную), то оба они выполняются за сотые доли секнды.
>
> MySQL 5.0.37
> Может кто нибудь знает в чём проблема?
>
>
>


From: Timur - 27/04/2007 - 20:53:17
Subject:Тормоза с вложенными запросами
-----------------
Explain:
select `test`.`kiev2_data`.`object_id` AS `object_id`,`test`.`kiev2_data`.`x` AS `x`,`test`.`kiev2_data`.`y` AS `y` from `test`.`kiev2_data` where <in_optimizer>(`test`.`kiev2_data`.`object_id`,<exists>(<index_lookup>(<cache>(`test`.`kiev2_data`.`object_id`) in kiev2_data on obj_id where ((`test`.`kiev2_data`.`x` between 50.448532 and 50.448532) and (`test`.`kiev2_data`.`y` between 30.257377 and 30.257377)))))

Если использовать:
SELECT object_id,x,y FROM kiev2_data WHERE (x BETWEEN 50.448532 AND 50.448532) AND (y BETWEEN 30.257377 AND 30.257377)
То мы выберем только точки попадающие в заданый диапазон, мне же надо чтобы выбирался весь объект если хоть одна его точка попадает в диапазон.

Пробовал так:
SELECT DISTINCT data2.object_id, data2.x, data2.y FROM kiev2_data AS data1 INNER JOIN kiev2_data AS data2 ON
data1.object_id=data2.object_id
WHERE (data1.x between 50.448532 and 50.448532) and (data1.y between 30.257377 and 30.257377)
Но тоже несколько секунд получается(таблица 18000 строк).

Но как я уже говорил если вложенный запрос выполнять по отдельности а результат подставлять в ручную, то доли секунды выходит...




[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
31460



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |